Index: pjproject/branches/split-3rd-party/pjmedia/build/pjmedia.dsp
===================================================================
--- pjproject/branches/split-3rd-party/pjmedia/build/pjmedia.dsp	(revision 1174)
+++ pjproject/branches/split-3rd-party/pjmedia/build/pjmedia.dsp	(revision 1175)
@@ -195,9 +195,14 @@
 # Begin Source File
 
-SOURCE=..\src\pjmedia\resample.c
-# End Source File
-# Begin Source File
-
 SOURCE=..\src\pjmedia\resample_port.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\pjmedia\resample_resample.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\pjmedia\resample_speex.c
+# PROP Exclude_From_Build 1
 # End Source File
 # Begin Source File
Index: pjproject/branches/split-3rd-party/pjmedia/src/pjmedia/BladeMP3EncDLL.h
===================================================================
--- pjproject/branches/split-3rd-party/pjmedia/src/pjmedia/BladeMP3EncDLL.h	(revision 1174)
+++ 	(revision )
@@ -1,283 +1,0 @@
-/*
- * Blade Type of DLL Interface for Lame encoder
- *
- * Copyright (c) 1999-2002 A.L. Faber
- * Based on bladedll.h version 1.0 written by Jukka Poikolainen
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- * 
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA  02111-1307, USA.
- */
-
-//#define _BLADEDLL 1
-
-#ifndef ___BLADEDLL_H_INCLUDED___
-#define ___BLADEDLL_H_INCLUDED___
-
-#ifdef __GNUC__
-//#define ATTRIBUTE_PACKED	__attribute__((packed))
-#define ATTRIBUTE_PACKED
-#else
-#define ATTRIBUTE_PACKED
-#pragma pack(push)
-#pragma pack(1)
-#endif
-
-#ifdef	__cplusplus
-extern "C" {
-#endif
-
-/* encoding formats */
-
-#define		BE_CONFIG_MP3			0										
-#define		BE_CONFIG_LAME			256		
-
-/* type definitions */
-
-typedef		unsigned long			HBE_STREAM;
-typedef		HBE_STREAM				*PHBE_STREAM;
-typedef		unsigned long			BE_ERR;
-
-/* error codes */
-
-#define		BE_ERR_SUCCESSFUL					0x00000000
-#define		BE_ERR_INVALID_FORMAT				0x00000001
-#define		BE_ERR_INVALID_FORMAT_PARAMETERS	0x00000002
-#define		BE_ERR_NO_MORE_HANDLES				0x00000003
-#define		BE_ERR_INVALID_HANDLE				0x00000004
-#define		BE_ERR_BUFFER_TOO_SMALL				0x00000005
-
-/* other constants */
-
-#define		BE_MAX_HOMEPAGE			128
-
-/* format specific variables */
-
-#define		BE_MP3_MODE_STEREO		0
-#define		BE_MP3_MODE_JSTEREO		1
-#define		BE_MP3_MODE_DUALCHANNEL	2
-#define		BE_MP3_MODE_MONO		3
-
-
-
-#define		MPEG1	1
-#define		MPEG2	0
-
-#ifdef _BLADEDLL
-#undef FLOAT
-	#include <Windows.h>
-#endif
-
-#define CURRENT_STRUCT_VERSION 1
-#define CURRENT_STRUCT_SIZE sizeof(BE_CONFIG)	// is currently 331 bytes
-
-
-typedef enum
-{
-	VBR_METHOD_NONE			= -1,
-	VBR_METHOD_DEFAULT		=  0,
-	VBR_METHOD_OLD			=  1,
-	VBR_METHOD_NEW			=  2,
-	VBR_METHOD_MTRH			=  3,
-	VBR_METHOD_ABR			=  4
-} VBRMETHOD;
-
-typedef enum 
-{
-	LQP_NOPRESET			=-1,
-
-	// QUALITY PRESETS
-	LQP_NORMAL_QUALITY		= 0,
-	LQP_LOW_QUALITY			= 1,
-	LQP_HIGH_QUALITY		= 2,
-	LQP_VOICE_QUALITY		= 3,
-	LQP_R3MIX				= 4,
-	LQP_VERYHIGH_QUALITY	= 5,
-	LQP_STANDARD			= 6,
-	LQP_FAST_STANDARD		= 7,
-	LQP_EXTREME				= 8,
-	LQP_FAST_EXTREME		= 9,
-	LQP_INSANE				= 10,
-	LQP_ABR					= 11,
-	LQP_CBR					= 12,
-	LQP_MEDIUM				= 13,
-	LQP_FAST_MEDIUM			= 14,
-
-	// NEW PRESET VALUES
-	LQP_PHONE	=1000,
-	LQP_SW		=2000,
-	LQP_AM		=3000,
-	LQP_FM		=4000,
-	LQP_VOICE	=5000,
-	LQP_RADIO	=6000,
-	LQP_TAPE	=7000,
-	LQP_HIFI	=8000,
-	LQP_CD		=9000,
-	LQP_STUDIO	=10000
-
-} LAME_QUALITY_PRESET;
-
-
-
-typedef struct	{
-	unsigned long	dwConfig;			// BE_CONFIG_XXXXX
-								// Currently only BE_CONFIG_MP3 is supported
-	union	{
-
-		struct	{
-
-			unsigned long	dwSampleRate;		// 48000, 44100 and 32000 allowed
-			unsigned char	byMode;			// BE_MP3_MODE_STEREO, BE_MP3_MODE_DUALCHANNEL, BE_MP3_MODE_MONO
-			unsigned short	wBitrate;		// 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256 and 320 allowed
-			int	bPrivate;		
-			int	bCRC;
-			int	bCopyright;
-			int	bOriginal;
-
-			} mp3;					// BE_CONFIG_MP3
-
-			struct
-			{
-			// STRUCTURE INFORMATION
-			unsigned long			dwStructVersion;	
-			unsigned long			dwStructSize;
-
-			// BASIC ENCODER SETTINGS
-			unsigned long			dwSampleRate;		// SAMPLERATE OF INPUT FILE
-			unsigned long			dwReSampleRate;		// DOWNSAMPLERATE, 0=ENCODER DECIDES  
-			long			nMode;				// BE_MP3_MODE_STEREO, BE_MP3_MODE_DUALCHANNEL, BE_MP3_MODE_MONO
-			unsigned long			dwBitrate;			// CBR bitrate, VBR min bitrate
-			unsigned long			dwMaxBitrate;		// CBR ignored, VBR Max bitrate
-			long			nPreset;			// Quality preset, use one of the settings of the LAME_QUALITY_PRESET enum
-			unsigned long			dwMpegVersion;		// FUTURE USE, MPEG-1 OR MPEG-2
-			unsigned long			dwPsyModel;			// FUTURE USE, SET TO 0
-			unsigned long			dwEmphasis;			// FUTURE USE, SET TO 0
-
-			// BIT STREAM SETTINGS
-			int			bPrivate;			// Set Private Bit (TRUE/FALSE)
-			int			bCRC;				// Insert CRC (TRUE/FALSE)
-			int			bCopyright;			// Set Copyright Bit (TRUE/FALSE)
-			int			bOriginal;			// Set Original Bit (TRUE/FALSE)
-			
-			// VBR STUFF
-			int			bWriteVBRHeader;	// WRITE XING VBR HEADER (TRUE/FALSE)
-			int			bEnableVBR;			// USE VBR ENCODING (TRUE/FALSE)
-			int				nVBRQuality;		// VBR QUALITY 0..9
-			unsigned long			dwVbrAbr_bps;		// Use ABR in stead of nVBRQuality
-			VBRMETHOD		nVbrMethod;
-			int			bNoRes;				// Disable Bit resorvoir (TRUE/FALSE)
-
-			// MISC SETTINGS
-			int			bStrictIso;			// Use strict ISO encoding rules (TRUE/FALSE)
-			unsigned short			nQuality;			// Quality Setting, HIGH unsigned char should be NOT LOW byte, otherwhise quality=5
-
-			// FUTURE USE, SET TO 0, align strucutre to 331 bytes
-			unsigned char			btReserved[255-4*sizeof(unsigned long) - sizeof( unsigned short )];
-
-			} LHV1;					// LAME header version 1
-
-		struct	{
-
-			unsigned long	dwSampleRate;
-			unsigned char	byMode;
-			unsigned short	wBitrate;
-			unsigned char	byEncodingMethod;
-
-		} aac;
-
-	} format;
-		
-} BE_CONFIG, *PBE_CONFIG ATTRIBUTE_PACKED;
-
-
-typedef struct	{
-
-	// BladeEnc DLL Version number
-
-	unsigned char	byDLLMajorVersion;
-	unsigned char	byDLLMinorVersion;
-
-	// BladeEnc Engine Version Number
-
-	unsigned char	byMajorVersion;
-	unsigned char	byMinorVersion;
-
-	// DLL Release date
-
-	unsigned char	byDay;
-	unsigned char	byMonth;
-	unsigned short	wYear;
-
-	// BladeEnc	Homepage URL
-
-	char	zHomepage[BE_MAX_HOMEPAGE + 1];	
-
-	unsigned char	byAlphaLevel;
-	unsigned char	byBetaLevel;
-	unsigned char	byMMXEnabled;
-
-	unsigned char	btReserved[125];
-
-
-} BE_VERSION, *PBE_VERSION ATTRIBUTE_PACKED;
-
-#ifndef _BLADEDLL
-
-typedef unsigned long	(*BEINITSTREAM)			(PBE_CONFIG, unsigned long *, unsigned long *, PHBE_STREAM);
-typedef unsigned long	(*BEENCODECHUNK)		(HBE_STREAM, unsigned long, short *, unsigned char *, unsigned long *);
-
-// added for floating point audio  -- DSPguru, jd
-typedef unsigned long	(*BEENCODECHUNKFLOATS16NI)	(HBE_STREAM, unsigned long, float *, float *, unsigned char *, unsigned long *);
-typedef unsigned long	(*BEDEINITSTREAM)			(HBE_STREAM, unsigned char *, unsigned long *);
-typedef unsigned long	(*BECLOSESTREAM)			(HBE_STREAM);
-typedef void	(*BEVERSION)				(PBE_VERSION);
-typedef unsigned long	(*BEWRITEVBRHEADER)			(const char*);
-typedef unsigned long	(*BEWRITEINFOTAG)			(HBE_STREAM, const char * );
-
-#define	TEXT_BEINITSTREAM				"beInitStream"
-#define	TEXT_BEENCODECHUNK				"beEncodeChunk"
-#define	TEXT_BEENCODECHUNKFLOATS16NI	"beEncodeChunkFloatS16NI"
-#define	TEXT_BEDEINITSTREAM				"beDeinitStream"
-#define	TEXT_BECLOSESTREAM				"beCloseStream"
-#define	TEXT_BEVERSION					"beVersion"
-#define	TEXT_BEWRITEVBRHEADER			"beWriteVBRHeader"
-#define	TEXT_BEFLUSHNOGAP				"beFlushNoGap"
-#define	TEXT_BEWRITEINFOTAG				"beWriteInfoTag"
-
-
-#else
-
-__declspec(dllexport) unsigned long	beInitStream(PBE_CONFIG pbeConfig, Punsigned long dwSamples, Punsigned long dwBufferSize, PHBE_STREAM phbeStream);
-__declspec(dllexport) unsigned long	beEncodeChunk(HBE_STREAM hbeStream, unsigned long nSamples, PSHORT pSamples, Punsigned char pOutput, Punsigned long pdwOutput);
-
-// added for floating point audio  -- DSPguru, jd
-__declspec(dllexport) unsigned long	beEncodeChunkFloatS16NI(HBE_STREAM hbeStream, unsigned long nSamples, PFLOAT buffer_l, PFLOAT buffer_r, Punsigned char pOutput, Punsigned long pdwOutput);
-__declspec(dllexport) unsigned long	beDeinitStream(HBE_STREAM hbeStream, Punsigned char pOutput, Punsigned long pdwOutput);
-__declspec(dllexport) unsigned long	beCloseStream(HBE_STREAM hbeStream);
-__declspec(dllexport) VOID		beVersion(PBE_VERSION pbeVersion);
-__declspec(dllexport) unsigned long	beWriteVBRHeader(LPCSTR lpszFileName);
-__declspec(dllexport) unsigned long	beFlushNoGap(HBE_STREAM hbeStream, Punsigned char pOutput, Punsigned long pdwOutput);
-__declspec(dllexport) unsigned long	beWriteInfoTag( HBE_STREAM hbeStream, LPCSTR lpszFileName );
-
-#endif
-
-#ifndef __GNUC__
-#pragma pack(pop)
-#endif
-
-#ifdef	__cplusplus
-}
-#endif
-
-#endif
Index: pjproject/branches/split-3rd-party/pjmedia/src/pjmedia/largefilter.h
===================================================================
--- pjproject/branches/split-3rd-party/pjmedia/src/pjmedia/largefilter.h	(revision 1174)
+++ 	(revision )
@@ -1,16391 +1,0 @@
-/* Included by resamplesubs.c */
-#define LARGE_FILTER_NMULT ((RES_HWORD)65)
-#define LARGE_FILTER_SCALE 14746 /* Unity-gain scale factor */
-#define LARGE_FILTER_NWING 8192 /* Filter table length */
-static const RES_HWORD LARGE_FILTER_IMP[] /* Impulse response */ = {
-32767,
-32766,
-32764,
-32761,
-32756,
-32750,
-32743,
-32734,
-32724,
-32713,
-32700,
-32686,
-32671,
-32654,
-32636,
-32617,
-32596,
-32574,
-32551,
-32526,
-32500,
-32473,
-32445,
-32415,
-32383,
-32351,
-32317,
-32282,
-32246,
-32208,
-32169,
-32129,
-32087,
-32044,
-32000,
-31955,
-31908,
-31860,
-31811,
-31760,
-31708,
-31655,
-31601,
-31545,
-31489,
-31431,
-31371,
-31311,
-31249,
-31186,
-31122,
-31056,
-30990,
-30922,
-30853,
-30783,
-30711,
-30639,
-30565,
-30490,
-30414,
-30337,
-30258,
-30179,
-30098,
-30016,
-29933,
-29849,
-29764,
-29677,
-29590,
-29501,
-29411,
-29321,
-29229,
-29136,
-29042,
-28947,
-28851,
-28753,
-28655,
-28556,
-28456,
-28354,
-28252,
-28149,
-28044,
-27939,
-27833,
-27725,
-27617,
-27508,
-27398,
-27287,
-27175,
-27062,
-26948,
-26833,
-26717,
-26601,
-26483,
-26365,
-26246,
-26125,
-26005,
-25883,
-25760,
-25637,
-25512,
-25387,
-25261,
-25135,
-25007,
-24879,
-24750,
-24620,
-24490,
-24358,
-24226,
-24094,
-23960,
-23826,
-23691,
-23556,
-23420,
-23283,
-23146,
-23008,
-22869,
-22730,
-22590,
-22449,
-22308,
-22166,
-22024,
-21881,
-21738,
-21594,
-21449,
-21304,
-21159,
-21013,
-20866,
-20719,
-20572,
-20424,
-20275,
-20127,
-19977,
-19828,
-19678,
-19527,
-19376,
-19225,
-19073,
-18921,
-18769,
-18616,
-18463,
-18310,
-18157,
-18003,
-17849,
-17694,
-17539,
-17384,
-17229,
-17074,
-16918,
-16762,
-16606,
-16450,
-16294,
-16137,
-15980,
-15823,
-15666,
-15509,
-15352,
-15195,
-15037,
-14880,
-14722,
-14564,
-14407,
-14249,
-14091,
-13933,
-13775,
-13618,
-13460,
-13302,
-13144,
-12987,
-12829,
-12671,
-12514,
-12356,
-12199,
-12042,
-11885,
-11728,
-11571,
-11414,
-11257,
-11101,
-10945,
-10789,
-10633,
-10477,
-10322,
-10167,
-10012,
-9857,
-9702,
-9548,
-9394,
-9241,
-9087,
-8934,
-8781,
-8629,
-8477,
-8325,
-8174,
-8023,
-7872,
-7722,
-7572,
-7422,
-7273,
-7124,
-6976,
-6828,
-6681,
-6534,
-6387,
-6241,
-6096,
-5951,
-5806,
-5662,
-5518,
-5375,
-5233,
-5091,
-4949,
-4808,
-4668,
-4528,
-4389,
-4250,
-4112,
-3975,
-3838,
-3702,
-3566,
-3431,
-3297,
-3163,
-3030,
-2898,
-2766,
-2635,
-2505,
-2375,
-2246,
-2118,
-1990,
-1864,
-1738,
-1612,
-1487,
-1364,
-1240,
-1118,
-996,
-875,
-755,
-636,
-517,
-400,
-283,
-166,
-51,
--63,
--176,
--289,
--401,
--513,
--623,
--733,
--841,
--949,
--1056,
--1162,
--1268,
--1372,
--1476,
--1578,
--1680,
--1781,
--1881,
--1980,
--2078,
--2176,
--2272,
--2367,
--2462,
--2556,
--2648,
--2740,
--2831,
--2921,
--3010,
--3098,
--3185,
--3271,
--3356,
--3441,
--3524,
--3606,
--3688,
--3768,
--3848,
--3926,
--4004,
--4080,
--4156,
--4231,
--4304,
--4377,
--4449,
--4519,
--4589,
--4658,
--4726,
--4792,
--4858,
--4923,
--4987,
--5050,
--5111,
--5172,
--5232,
--5291,
--5349,
--5406,
--5462,
--5517,
--5571,
--5624,
--5675,
--5726,
--5776,
--5825,
--5873,
--5920,
--5966,
--6011,
--6055,
--6098,
--6140,
--6181,
--6222,
--6261,
--6299,
--6336,
--6372,
--6407,
--6441,
--6475,
--6507,
--6538,
--6569,
--6598,
--6626,
--6654,
--6680,
--6706,
--6730,
--6754,
--6777,
--6798,
--6819,
--6839,
--6858,
--6876,
--6893,
--6909,
--6924,
--6938,
--6951,
--6964,
--6975,
--6986,
--6995,
--7004,
--7012,
--7019,
--7025,
--7030,
--7035,
--7038,
--7040,
--7042,
--7043,
--7043,
--7042,
--7040,
--7038,
--7034,
--7030,
--7025,
--7019,
--7012,
--7004,
--6996,
--6986,
--6976,
--6965,
--6954,
--6941,
--6928,
--6914,
--6899,
--6884,
--6867,
--6850,
--6832,
--6814,
--6794,
--6774,
--6753,
--6732,
--6709,
--6686,
--6663,
--6638,
--6613,
--6587,
--6561,
--6534,
--6506,
--6478,
--6448,
--6419,
--6388,
--6357,
--6325,
--6293,
--6260,
--6226,
--6192,
--6157,
--6122,
--6086,
--6049,
--6012,
--5975,
--5936,
--5897,
--5858,
--5818,
--5778,
--5737,
--5695,
--5653,
--5611,
--5568,
--5524,
--5480,
--5436,
--5391,
--5345,
--5300,
--5253,
--5207,
--5159,
--5112,
--5064,
--5015,
--4966,
--4917,
--4868,
--4818,
--4767,
--4716,
--4665,
--4614,
--4562,
--4510,
--4457,
--4404,
--4351,
--4298,
--4244,
--4190,
--4136,
--4081,
--4026,
--3971,
--3916,
--3860,
--3804,
--3748,
--3692,
--3635,
--3578,
--3521,
--3464,
--3406,
--3349,
--3291,
--3233,
--3175,
--3117,
--3058,
--3000,
--2941,
--2882,
--2823,
--2764,
--2705,
--2646,
--2587,
--2527,
--2468,
--2408,
--2349,
--2289,
--2229,
--2169,
--2110,
--2050,
--1990,
--1930,
--1870,
--1811,
--1751,
--1691,
--1631,
--1571,
--1512,
--1452,
--1392,
--1333,
--1273,
--1214,
--1154,
--1095,
--1036,
--977,
--918,
--859,
--800,
--741,
--683,
--624,
--566,
--508,
--450,
--392,
--335,
--277,
--220,
--163,
--106,
--49,
-6,
-63,
-119,
-175,
-230,
-286,
-341,
-396,
-450,
-505,
-559,
-613,
-667,
-720,
-773,
-826,
-878,
-931,
-983,
-1034,
-1086,
-1137,
-1187,
-1238,
-1288,
-1337,
-1387,
-1436,
-1484,
-1533,
-1581,
-1628,
-1675,
-1722,
-1769,
-1815,
-1861,
-1906,
-1951,
-1996,
-2040,
-2084,
-2127,
-2170,
-2212,
-2255,
-2296,
-2338,
-2378,
-2419,
-2459,
-2498,
-2538,
-2576,
-2615,
-2652,
-2690,
-2727,
-2763,
-2799,
-2834,
-2870,
-2904,
-2938,
-2972,
-3005,
-3038,
-3070,
-3102,
-3133,
-3164,
-3194,
-3224,
-3253,
-3282,
-3310,
-3338,
-3365,
-3392,
-3418,
-3444,
-3469,
-3494,
-3518,
-3542,
-3566,
-3588,
-3611,
-3632,
-3653,
-3674,
-3694,
-3714,
-3733,
-3752,
-3770,
-3788,
-3805,
-3821,
-3837,
-3853,
-3868,
-3882,
-3896,
-3910,
-3923,
-3935,
-3947,
-3958,
-3969,
-3980,
-3989,
-3999,
-4007,
-4016,
-4023,
-4031,
-4037,
-4044,
-4049,
-4054,
-4059,
-4063,
-4067,
-4070,
-4073,
-4075,
-4076,
-4077,
-4078,
-4078,
-4078,
-4077,
-4076,
-4074,
-4071,
-4068,
-4065,
-4061,
-4057,
-4052,
-4047,
-4041,
-4035,
-4028,
-4021,
-4013,
-4005,
-3997,
-3988,
-3978,
-3968,
-3958,
-3947,
-3936,
-3924,
-3912,
-3899,
-3886,
-3872,
-3858,
-3844,
-3829,
-3814,
-3798,
-3782,
-3766,
-3749,
-3731,
-3714,
-3696,
-3677,
-3658,
-3639,
-3619,
-3599,
-3578,
-3558,
-3536,
-3515,
-3493,
-3470,
-3448,
-3425,
-3401,
-3378,
-3353,
-3329,
-3304,
-3279,
-3254,
-3228,
-3202,
-3175,
-3149,
-3122,
-3094,
-3067,
-3039,
-3011,
-2982,
-2953,
-2924,
-2895,
-2865,
-2835,
-2805,
-2775,
-2744,
-2713,
-2682,
-2651,
-2619,
-2587,
-2555,
-2523,
-2490,
-2457,
-2424,
-2391,
-2358,
-2324,
-2290,
-2256,
-2222,
-2188,
-2153,
-2119,
-2084,
-2049,
-2014,
-1978,
-1943,
-1907,
-1872,
-1836,
-1800,
-1764,
-1727,
-1691,
-1655,
-1618,
-1581,
-1545,
-1508,
-1471,
-1434,
-1397,
-1360,
-1322,
-1285,
-1248,
-1210,
-1173,
-1135,
-1098,
-1060,
-1023,
-985,
-947,
-910,
-872,
-834,
-797,
-759,
-721,
-684,
-646,
-608,
-571,
-533,
-496,
-458,
-421,
-383,
-346,
-308,
-271,
-234,
-197,
-160,
-123,
-86,
-49,
-12,
--23,
--60,
--96,
--133,
--169,
--205,
--241,
--277,
--313,
--348,
--384,
--419,
--455,
--490,
--525,
--559,
--594,
--628,
--663,
--697,
--731,
--765,
--798,
--832,
--865,
--898,
--931,
--963,
--996,
--1028,
--1060,
--1092,
--1124,
--1155,
--1186,
--1217,
--1248,
--1279,
--1309,
--1339,
--1369,
--1398,
--1428,
--1457,
--1486,
--1514,
--1542,
--1571,
--1598,
--1626,
--1653,
--1680,
--1707,
--1733,
--1760,
--1785,
--1811,
--1836,
--1862,
--1886,
--1911,
--1935,
--1959,
--1982,
--2006,
--2029,
--2051,
--2074,
--2096,
--2118,
--2139,
--2160,
--2181,
--2202,
--2222,
--2242,
--2261,
--2280,
--2299,
--2318,
--2336,
--2354,
--2372,
--2389,
--2406,
--2423,
--2439,
--2455,
--2470,
--2486,
--2500,
--2515,
--2529,
--2543,
--2557,
--2570,
--2583,
--2595,
--2607,
--2619,
--2631,
--2642,
--2652,
--2663,
--2673,
--2683,
--2692,
--2701,
--2710,
--2718,
--2726,
--2734,
--2741,
--2748,
--2754,
--2760,
--2766,
--2772,
--2777,
--2782,
--2786,
--2790,
--2794,
--2797,
--2800,
--2803,
--2805,
--2807,
--2809,
--2810,
--2811,
--2812,
--2812,
--2812,
--2812,
--2811,
--2810,
--2808,
--2807,
--2804,
--2802,
--2799,
--2796,
--2792,
--2789,
--2785,
--2780,
--2775,
--2770,
--2765,
--2759,
--2753,
--2746,
--2740,
--2732,
--2725,
--2717,
--2709,
--2701,
--2692,
--2683,
--2674,
--2664,
--2655,
--2644,
--2634,
--2623,
--2612,
--2601,
--2589,
--2577,
--2565,
--2552,
--2539,
--2526,
--2513,
--2499,
--2485,
--2471,
--2457,
--2442,
--2427,
--2412,
--2396,
--2380,
--2364,
--2348,
--2331,
--2315,
--2297,
--2280,
--2263,
--2245,
--2227,
--2209,
--2190,
--2171,
--2152,
--2133,
--2114,
--2094,
--2075,
--2055,
--2034,
--2014,
--1993,
--1972,
--1951,
--1930,
--1909,
--1887,
--1865,
--1843,
--1821,
--1799,
--1776,
--1754,
--1731,
--1708,
--1685,
--1662,
--1638,
--1614,
--1591,
--1567,
--1543,
--1519,
--1494,
--1470,
--1445,
--1421,
--1396,
--1371,
--1346,
--1321,
--1295,
--1270,
--1244,
--1219,
--1193,
--1167,
--1142,
--1116,
--1090,
--1064,
--1037,
--1011,
--985,
--958,
--932,
--905,
--879,
--852,
--826,
--799,
--772,
--745,
--719,
--692,
--665,
--638,
--611,
--584,
--557,
--530,
--503,
--476,
--449,
--422,
--395,
--368,
--341,
--314,
--287,
--260,
--234,
--207,
--180,
--153,
--126,
--100,
--73,
--46,
--20,
-6,
-32,
-59,
-85,
-111,
-138,
-164,
-190,
-216,
-242,
-268,
-294,
-319,
-345,
-370,
-396,
-421,
-446,
-471,
-496,
-521,
-546,
-571,
-595,
-619,
-644,
-668,
-692,
-716,
-739,
-763,
-787,
-810,
-833,
-856,
-879,
-902,
-924,
-947,
-969,
-991,
-1013,
-1035,
-1056,
-1078,
-1099,
-1120,
-1141,
-1162,
-1182,
-1202,
-1223,
-1243,
-1262,
-1282,
-1301,
-1320,
-1339,
-1358,
-1377,
-1395,
-1413,
-1431,
-1449,
-1467,
-1484,
-1501,
-1518,
-1535,
-1551,
-1567,
-1583,
-1599,
-1615,
-1630,
-1645,
-1660,
-1674,
-1689,
-1703,
-1717,
-1731,
-1744,
-1757,
-1770,
-1783,
-1795,
-1808,
-1820,
-1831,
-1843,
-1854,
-1865,
-1876,
-1886,
-1897,
-1907,
-1916,
-1926,
-1935,
-1944,
-1953,
-1961,
-1970,
-1978,
-1985,
-1993,
-2000,
-2007,
-2014,
-2020,
-2026,
-2032,
-2038,
-2043,
-2048,
-2053,
-2058,
-2062,
-2066,
-2070,
-2073,
-2077,
-2080,
-2083,
-2085,
-2087,
-2089,
-2091,
-2093,
-2094,
-2095,
-2095,
-2096,
-2096,
-2096,
-2096,
-2095,
-2094,
-2093,
-2092,
-2090,
-2088,
-2086,
-2084,
-2081,
-2079,
-2075,
-2072,
-2069,
-2065,
-2061,
-2056,
-2052,
-2047,
-2042,
-2037,
-2031,
-2025,
-2019,
-2013,
-2006,
-2000,
-1993,
-1986,
-1978,
-1971,
-1963,
-1955,
-1946,
-1938,
-1929,
-1920,
-1911,
-1901,
-1892,
-1882,
-1872,
-1862,
-1851,
-1841,
-1830,
-1819,
-1807,
-1796,
-1784,
-1772,
-1760,
-1748,
-1735,
-1723,
-1710,
-1697,
-1684,
-1670,
-1657,
-1643,
-1629,
-1615,
-1601,
-1586,
-1572,
-1557,
-1542,
-1527,
-1512,
-1496,
-1481,
-1465,
-1449,
-1433,
-1417,
-1401,
-1384,
-1368,
-1351,
-1334,
-1317,
-1300,
-1283,
-1265,
-1248,
-1230,
-1212,
-1195,
-1177,
-1159,
-1140,
-1122,
-1104,
-1085,
-1067,
-1048,
-1029,
-1010,
-991,
-972,
-953,
-934,
-915,
-895,
-876,
-856,
-837,
-817,
-797,
-777,
-758,
-738,
-718,
-698,
-678,
-658,
-637,
-617,
-597,
-577,
-556,
-536,
-516,
-495,
-475,
-454,
-434,
-414,
-393,
-373,
-352,
-332,
-311,
-291,
-270,
-250,
-229,
-208,
-188,
-168,
-147,
-127,
-106,
-86,
-65,
-45,
-25,
-5,
--15,
--35,
--55,
--75,
--95,
--115,
--135,
--155,
--175,
--195,
--215,
--234,
--254,
--274,
--293,
--313,
--332,
--351,
--370,
--390,
--409,
--428,
--446,
--465,
--484,
--503,
--521,
--539,
--558,
--576,
--594,
--612,
--630,
--648,
--666,
--683,
--701,
--718,
--735,
--752,
--769,
--786,
--803,
--819,
--836,
--852,
--868,
--885,
--900,
--916,
--932,
--947,
--963,
--978,
--993,
--1008,
--1023,
--1038,
--1052,
--1066,
--1081,
--1095,
--1108,
--1122,
--1136,
--1149,
--1162,
--1175,
--1188,
--1201,
--1214,
--1226,
--1238,
--1250,
--1262,
--1274,
--1285,
--1297,
--1308,
--1319,
--1330,
--1340,
--1351,
--1361,
--1371,
--1381,
--1390,
--1400,
--1409,
--1418,
--1427,
--1436,
--1445,
--1453,
--1461,
--1469,
--1477,
--1485,
--1492,
--1499,
--1506,
--1513,
--1520,
--1526,
--1532,
--1538,
--1544,
--1550,
--1555,
--1560,
--1566,
--1570,
--1575,
--1579,
--1584,
--1588,
--1592,
--1595,
--1599,
--1602,
--1605,
--1608,
--1610,
--1613,
--1615,
--1617,
--1619,
--1620,
--1622,
--1623,
--1624,
--1625,
--1625,
--1626,
--1626,
--1626,
--1626,
--1625,
--1625,
--1624,
--1623,
--1622,
--1621,
--1619,
--1617,
--1615,
--1613,
--1611,
--1608,
--1605,
--1603,
--1599,
--1596,
--1593,
--1589,
--1585,
--1581,
--1577,
--1572,
--1568,
--1563,
--1558,
--1553,
--1547,
--1542,
--1536,
--1530,
--1524,
--1518,
--1511,
--1505,
--1498,
--1491,
--1484,
--1477,
--1469,
--1462,
--1454,
--1446,
--1438,
--1430,
--1421,
--1413,
--1404,
--1395,
--1386,
--1377,
--1367,
--1358,
--1348,
--1338,
--1328,
--1318,
--1308,
--1297,
--1287,
--1276,
--1265,
--1254,
--1243,
--1232,
--1221,
--1209,
--1198,
--1186,
--1174,
--1162,
--1150,
--1138,
--1125,
--1113,
--1100,
--1087,
--1075,
--1062,
--1049,
--1035,
--1022,
--1009,
--995,
--982,
--968,
--954,
--941,
--927,
--913,
--898,
--884,
--870,
--856,
--841,
--827,
--812,
--797,
--783,
--768,
--753,
--738,
--723,
--708,
--692,
--677,
--662,
--647,
--631,
--616,
--600,
--585,
--569,
--554,
--538,
--522,
--506,
--491,
--475,
--459,
--443,
--427,
--411,
--395,
--379,
--363,
--347,
--331,
--315,
--299,
--283,
--267,
--251,
--235,
--218,
--202,
--186,
--170,
--154,
--138,
--122,
--106,
--90,
--74,
--58,
--42,
--26,
--10,
-5,
-21,
-37,
-53,
-69,
-85,
-100,
-116,
-132,
-147,
-163,
-179,
-194,
-209,
-225,
-240,
-256,
-271,
-286,
-301,
-316,
-331,
-346,
-361,
-376,
-391,
-405,
-420,
-434,
-449,
-463,
-477,
-492,
-506,
-520,
-534,
-548,
-561,
-575,
-589,
-602,
-615,
-629,
-642,
-655,
-668,
-681,
-694,
-706,
-719,
-731,
-744,
-756,
-768,
-780,
-792,
-804,
-816,
-827,
-839,
-850,
-861,
-872,
-883,
-894,
-905,
-915,
-926,
-936,
-946,
-956,
-966,
-976,
-986,
-995,
-1005,
-1014,
-1023,
-1032,
-1041,
-1049,
-1058,
-1066,
-1075,
-1083,
-1091,
-1099,
-1106,
-1114,
-1121,
-1128,
-1135,
-1142,
-1149,
-1156,
-1162,
-1169,
-1175,
-1181,
-1187,
-1192,
-1198,
-1203,
-1208,
-1214,
-1218,
-1223,
-1228,
-1232,
-1237,
-1241,
-1245,
-1249,
-1252,
-1256,
-1259,
-1262,
-1265,
-1268,
-1271,
-1273,
-1276,
-1278,
-1280,
-1282,
-1284,
-1285,
-1287,
-1288,
-1289,
-1290,
-1291,
-1292,
-1292,
-1292,
-1293,
-1293,
-1292,
-1292,
-1292,
-1291,
-1290,
-1289,
-1288,
-1287,
-1285,
-1284,
-1282,
-1280,
-1278,
-1276,
-1274,
-1271,
-1269,
-1266,
-1263,
-1260,
-1257,
-1253,
-1250,
-1246,
-1242,
-1238,
-1234,
-1230,
-1225,
-1221,
-1216,
-1211,
-1206,
-1201,
-1196,
-1190,
-1185,
-1179,
-1173,
-1167,
-1161,
-1155,
-1149,
-1142,
-1136,
-1129,
-1122,
-1115,
-1108,
-1101,
-1094,
-1086,
-1078,
-1071,
-1063,
-1055,
-1047,
-1039,
-1030,
-1022,
-1013,
-1005,
-996,
-987,
-978,
-969,
-960,
-951,
-941,
-932,
-922,
-913,
-903,
-893,
-883,
-873,
-863,
-853,
-842,
-832,
-821,
-811,
-800,
-789,
-778,
-768,
-757,
-746,
-734,
-723,
-712,
-701,
-689,
-678,
-666,
-654,
-643,
-631,
-619,
-607,
-596,
-584,
-572,
-559,
-547,
-535,
-523,
-511,
-498,
-486,
-474,
-461,
-449,
-436,
-424,
-411,
-399,
-386,
-373,
-361,
-348,
-335,
-322,
-310,
-297,
-284,
-271,
-258,
-246,
-233,
-220,
-207,
-194,
-181,
-168,
-156,
-143,
-130,
-117,
-104,
-91,
-78,
-65,
-53,
-40,
-27,
-14,
-1,
--10,
--23,
--36,
--48,
--61,
--74,
--86,
--99,
--111,
--124,
--136,
--149,
--161,
--174,
--186,
--198,
--211,
--223,
--235,
--247,
--259,
--271,
--283,
--295,
--307,
--319,
--330,
--342,
--354,
--365,
--377,
--388,
--399,
--411,
--422,
--433,
--444,
--455,
--466,
--477,
--488,
--499,
--509,
--520,
--530,
--541,
--551,
--561,
--571,
--581,
--591,
--601,
--611,
--621,
--631,
--640,
--650,
--659,
--668,
--677,
--686,
--695,
--704,
--713,
--722,
--730,
--739,
--747,
--755,
--763,
--771,
--779,
--787,
--795,
--803,
--810,
--817,
--825,
--832,
--839,
--846,
--853,
--859,
--866,
--873,
--879,
--885,
--891,
--897,
--903,
--909,
--915,
--920,
--926,
--931,
--936,
--941,
--946,
--951,
--955,
--960,
--964,
--969,
--973,
--977,
--981,
--985,
--988,
--992,
--995,
--999,
--1002,
--1005,
--1008,
--1011,
--1013,
--1016,
--1018,
--1020,
--1023,
--1025,
--1026,
--1028,
--1030,
--1031,
--1033,
--1034,
--1035,
--1036,
--1037,
--1038,
--1038,
--1039,
--1039,
--1039,
--1039,
--1039,
--1039,
--1039,
--1038,
--1038,
--1037,
--1036,
--1036,
--1034,
--1033,
--1032,
--1031,
--1029,
--1027,
--1026,
--1024,
--1022,
--1019,
--1017,
--1015,
--1012,
--1010,
--1007,
--1004,
--1001,
--998,
--995,
--991,
--988,
--984,
--980,
--977,
--973,
--969,
--965,
--960,
--956,
--951,
--947,
--942,
--937,
--932,
--927,
--922,
--917,
--912,
--906,
--901,
--895,
--889,
--883,
--877,
--871,
--865,
--859,
--853,
--846,
--840,
--833,
--826,
--819,
--812,
--805,
--798,
--791,
--784,
--777,
--769,
--762,
--754,
--746,
--739,
--731,
--723,
--715,
--707,
--699,
--691,
--682,
--674,
--665,
--657,
--648,
--640,
--631,
--622,
--614,
--605,
--596,
--587,
--578,
--569,
--559,
--550,
--541,
--532,
--522,
--513,
--503,
--494,
--484,
--474,
--465,
--455,
--445,
--436,
--426,
--416,
--406,
--396,
--386,
--376,
--366,
--356,
--346,
--336,
--325,
--315,
--305,
--295,
--285,
--274,
--264,
--254,
--243,
--233,
--223,
--212,
--202,
--192,
--181,
--171,
--161,
--150,
--140,
--129,
--119,
--108,
--98,
--88,
--77,
--67,
--57,
--46,
--36,
--25,
--15,
--5,
-5,
-15,
-25,
-35,
-46,
-56,
-66,
-76,
-86,
-97,
-107,
-117,
-127,
-137,
-147,
-157,
-167,
-177,
-186,
-196,
-206,
-216,
-225,
-235,
-245,
-254,
-264,
-273,
-283,
-292,
-301,
-311,
-320,
-329,
-338,
-347,
-356,
-365,
-374,
-383,
-392,
-400,
-409,
-418,
-426,
-435,
-443,
-451,
-460,
-468,
-476,
-484,
-492,
-500,
-508,
-515,
-523,
-531,
-538,
-546,
-553,
-560,
-568,
-575,
-582,
-589,
-596,
-602,
-609,
-616,
-622,
-629,
-635,
-642,
-648,
-654,
-660,
-666,
-672,
-678,
-683,
-689,
-694,
-700,
-705,
-710,
-715,
-720,
-725,
-730,
-735,
-739,
-744,
-748,
-753,
-757,
-761,
-765,
-769,
-773,
-777,
-780,
-784,
-787,
-791,
-794,
-797,
-800,
-803,
-806,
-809,
-811,
-814,
-816,
-818,
-821,
-823,
-825,
-827,
-828,
-830,
-832,
-833,
-835,
-836,
-837,
-838,
-839,
-840,
-841,
-841,
-842,
-842,
-843,
-843,
-843,
-843,
-843,
-843,
-843,
-842,
-842,
-841,
-840,
-840,
-839,
-838,
-837,
-835,
-834,
-833,
-831,
-830,
-828,
-826,
-824,
-822,
-820,
-818,
-816,
-813,
-811,
-808,
-806,
-803,
-800,
-797,
-794,
-791,
-788,
-784,
-781,
-777,
-774,
-770,
-766,
-763,
-759,
-755,
-750,
-746,
-742,
-738,
-733,
-729,
-724,
-719,
-714,
-710,
-705,
-700,
-694,
-689,
-684,
-679,
-673,
-668,
-662,
-657,
-651,
-645,
-639,
-633,
-627,
-621,
-615,
-609,
-603,
-596,
-590,
-584,
-577,
-571,
-564,
-557,
-551,
-544,
-537,
-530,
-523,
-516,
-509,
-502,
-495,
-487,
-480,
-473,
-465,
-458,
-450,
-443,
-435,
-428,
-420,
-413,
-405,
-397,
-389,
-381,
-374,
-366,
-358,
-350,
-342,
-334,
-326,
-318,
-310,
-301,
-293,
-285,
-277,
-269,
-260,
-252,
-244,
-236,
-227,
-219,
-211,
-202,
-194,
-185,
-177,
-169,
-160,
-152,
-143,
-135,
-126,
-118,
-110,
-101,
-93,
-84,
-76,
-67,
-59,
-50,
-42,
-34,
-25,
-17,
-8,
-0,
--7,
--16,
--24,
--32,
--41,
--49,
--57,
--66,
--74,
--82,
--90,
--98,
--106,
--115,
--123,
--131,
--139,
--147,
--155,
--163,
--171,
--179,
--186,
--194,
--202,
--210,
--217,
--225,
--233,
--240,
--248,
--255,
--263,
--270,
--278,
--285,
--292,
--299,
--307,
--314,
--321,
--328,
--335,
--342,
--349,
--356,
--362,
--369,
--376,
--382,
--389,
--396,
--402,
--408,
--415,
--421,
--427,
--433,
--439,
--445,
--451,
--457,
--463,
--469,
--475,
--480,
--486,
--491,
--497,
--502,
--507,
--513,
--518,
--523,
--528,
--533,
--538,
--542,
--547,
--552,
--556,
--561,
--565,
--570,
--574,
--578,
--582,
--586,
--590,
--594,
--598,
--602,
--605,
--609,
--612,
--616,
--619,
--622,
--625,
--629,
--632,
--634,
--637,
--640,
--643,
--645,
--648,
--650,
--653,
--655,
--657,
--659,
--661,
--663,
--665,
--667,
--668,
--670,
--671,
--673,
--674,
--675,
--676,
--678,
--679,
--679,
--680,
--681,
--682,
--682,
--683,
--683,
--683,
--684,
--684,
--684,
--684,
--684,
--684,
--683,
--683,
--682,
--682,
--681,
--681,
--680,
--679,
--678,
--677,
--676,
--675,
--674,
--672,
--671,
--669,
--668,
--666,
--664,
--662,
--661,
--659,
--657,
--654,
--652,
--650,
--648,
--645,
--643,
--640,
--637,
--635,
--632,
--629,
--626,
--623,
--620,
--617,
--613,
--610,
--607,
--603,
--600,
--596,
--593,
--589,
--585,
--581,
--577,
--573,
--569,
--565,
--561,
--557,
--552,
--548,
--544,
--539,
--534,
--530,
--525,
--520,
--516,
--511,
--506,
--501,
--496,
--491,
--486,
--481,
--475,
--470,
--465,
--460,
--454,
--449,
--443,
--438,
--432,
--426,
--421,
--415,
--409,
--403,
--398,
--392,
--386,
--380,
--374,
--368,
--362,
--355,
--349,
--343,
--337,
--331,
--324,
--318,
--312,
--305,
--299,
--292,
--286,
--280,
--273,
--266,
--260,
--253,
--247,
--240,
--234,
--227,
--220,
--213,
--207,
--200,
--193,
--187,
--180,
--173,
--166,
--159,
--153,
--146,
--139,
--132,
--125,
--118,
--112,
--105,
--98,
--91,
--84,
--77,
--70,
--64,
--57,
--50,
--43,
--36,
--29,
--22,
--16,
--9,
--2,
-4,
-11,
-17,
-24,
-31,
-38,
-44,
-51,
-58,
-64,
-71,
-78,
-84,
-91,
-98,
-104,
-111,
-117,
-124,
-130,
-137,
-143,
-149,
-156,
-162,
-168,
-175,
-181,
-187,
-193,
-199,
-205,
-212,
-218,
-224,
-230,
-236,
-241,
-247,
-253,
-259,
-265,
-270,
-276,
-282,
-287,
-293,
-298,
-304,
-309,
-314,
-320,
-325,
-330,
-335,
-340,
-345,
-350,
-355,
-360,
-365,
-370,
-375,
-380,
-384,
-389,
-393,
-398,
-402,
-407,
-411,
-415,
-419,
-424,
-428,
-432,
-436,
-440,
-443,
-447,
-451,
-455,
-458,
-462,
-465,
-469,
-472,
-475,
-479,
-482,
-485,
-488,
-491,
-494,
-497,
-499,
-502,
-505,
-507,
-510,
-512,
-515,
-517,
-519,
-522,
-524,
-526,
-528,
-530,
-532,
-533,
-535,
-537,
-538,
-540,
-541,
-543,
-544,
-545,
-546,
-548,
-549,
-550,
-550,
-551,
-552,
-553,
-553,
-554,
-554,
-555,
-555,
-555,
-556,
-556,
-556,
-556,
-556,
-556,
-555,
-555,
-555,
-554,
-554,
-553,
-553,
-552,
-551,
-551,
-550,
-549,
-548,
-547,
-546,
-545,
-543,
-542,
-541,
-539,
-538,
-536,
-534,
-533,
-531,
-529,
-527,
-525,
-523,
-521,
-519,
-517,
-514,
-512,
-510,
-507,
-505,
-502,
-500,
-497,
-494,
-492,
-489,
-486,
-483,
-480,
-477,
-474,
-471,
-467,
-464,
-461,
-457,
-454,
-450,
-447,
-443,
-440,
-436,
-432,
-429,
-425,
-421,
-417,
-413,
-409,
-405,
-401,
-397,
-393,
-388,
-384,
-380,
-375,
-371,
-367,
-362,
-358,
-353,
-349,
-344,
-339,
-335,
-330,
-325,
-321,
-316,
-311,
-306,
-301,
-296,
-291,
-286,
-281,
-276,
-271,
-266,
-261,
-256,
-251,
-245,
-240,
-235,
-230,
-225,
-219,
-214,
-209,
-203,
-198,
-193,
-187,
-182,
-176,
-171,
-165,
-160,
-154,
-149,
-144,
-138,
-132,
-127,
-121,
-116,
-110,
-105,
-99,
-94,
-88,
-83,
-77,
-71,
-66,
-60,
-55,
-49,
-44,
-38,
-33,
-27,
-21,
-16,
-10,
-5,
-0,
--5,
--11,
--16,
--22,
--27,
--33,
--38,
--43,
--49,
--54,
--60,
--65,
--70,
--76,
--81,
--86,
--92,
--97,
--102,
--107,
--113,
--118,
--123,
--128,
--133,
--138,
--143,
--148,
--153,
--158,
--163,
--168,
--173,
--178,
--183,
--188,
--192,
--197,
--202,
--207,
--211,
--216,
--221,
--225,
--230,
--234,
--239,
--243,
--247,
--252,
--256,
--260,
--265,
--269,
--273,
--277,
--281,
--285,
--289,
--293,
--297,
--301,
--305,
--308,
--312,
--316,
--319,
--323,
--327,
--330,
--334,
--337,
--340,
--344,
--347,
--350,
--353,
--357,
--360,
--363,
--366,
--369,
--372,
--374,
--377,
--380,
--383,
--385,
--388,
--390,
--393,
--395,
--398,
--400,
--402,
--405,
--407,
--409,
--411,
--413,
--415,
--417,
--419,
--420,
--422,
--424,
--425,
--427,
--429,
--430,
--431,
--433,
--434,
--435,
--436,
--438,
--439,
--440,
--441,
--442,
--442,
--443,
--444,
--445,
--445,
--446,
--446,
--447,
--447,
--448,
--448,
--448,
--448,
--449,
--449,
--449,
--449,
--449,
--448,
--448,
--448,
--448,
--447,
--447,
--446,
--446,
--445,
--445,
--444,
--443,
--442,
--442,
--441,
--440,
--439,
--438,
--437,
--435,
--434,
--433,
--432,
--430,
--429,
--427,
--426,
--424,
--423,
--421,
--419,
--418,
--416,
--414,
--412,
--410,
--408,
--406,
--404,
--402,
--400,
--397,
--395,
--393,
--390,
--388,
--385,
--383,
--380,
--378,
--375,
--373,
--370,
--367,
--364,
--361,
--359,
--356,
--353,
--350,
--347,
--344,
--340,
--337,
--334,
--331,
--328,
--324,
--321,
--318,
--314,
--311,
--307,
--304,
--300,
--297,
--293,
--290,
--286,
--282,
--279,
--275,
--271,
--267,
--263,
--260,
--256,
--252,
--248,
--244,
--240,
--236,
--232,
--228,
--224,
--220,
--216,
--212,
--207,
--203,
--199,
--195,
--191,
--186,
--182,
--178,
--174,
--169,
--165,
--161,
--156,
--152,
--148,
--143,
--139,
--134,
--130,
--126,
--121,
--117,
--112,
--108,
--103,
--99,
--95,
--90,
--86,
--81,
--77,
--72,
--68,
--63,
--59,
--54,
--50,
--45,
--41,
--36,
--32,
--27,
--23,
--18,
--14,
--9,
--5,
-0,
-3,
-7,
-12,
-16,
-21,
-25,
-29,
-34,
-38,
-43,
-47,
-51,
-56,
-60,
-64,
-69,
-73,
-77,
-81,
-85,
-90,
-94,
-98,
-102,
-106,
-110,
-115,
-119,
-123,
-127,
-131,
-135,
-139,
-143,
-146,
-150,
-154,
-158,
-162,
-166,
-169,
-173,
-177,
-181,
-184,
-188,
-192,
-195,
-199,
-202,
-206,
-209,
-212,
-216,
-219,
-223,
-226,
-229,
-232,
-236,
-239,
-242,
-245,
-248,
-251,
-254,
-257,
-260,
-263,
-266,
-268,
-271,
-274,
-277,
-279,
-282,
-284,
-287,
-289,
-292,
-294,
-297,
-299,
-301,
-304,
-306,
-308,
-310,
-312,
-314,
-316,
-318,
-320,
-322,
-324,
-326,
-328,
-329,
-331,
-333,
-334,
-336,
-337,
-339,
-340,
-341,
-343,
-344,
-345,
-346,
-348,
-349,
-350,
-351,
-352,
-353,
-354,
-354,
-355,
-356,
-357,
-357,
-358,
-358,
-359,
-359,
-360,
-360,
-361,
-361,
-361,
-361,
-362,
-362,
-362,
-362,
-362,
-362,
-362,
-361,
-361,
-361,
-361,
-360,
-360,
-360,
-359,
-359,
-358,
-358,
-357,
-356,
-356,
-355,
-354,
-353,
-352,
-351,
-350,
-349,
-348,
-347,
-346,
-345,
-344,
-343,
-341,
-340,
-339,
-337,
-336,
-334,
-333,
-331,
-330,
-328,
-326,
-324,
-323,
-321,
-319,
-317,
-315,
-313,
-311,
-309,
-307,
-305,
-303,
-301,
-299,
-297,
-294,
-292,
-290,
-288,
-285,
-283,
-280,
-278,
-275,
-273,
-270,
-268,
-265,
-263,
-260,
-257,
-254,
-252,
-249,
-246,
-243,
-240,
-238,
-235,
-232,
-229,
-226,
-223,
-220,
-217,
-214,
-211,
-208,
-204,
-201,
-198,
-195,
-192,
-188,
-185,
-182,
-179,
-175,
-172,
-169,
-165,
-162,
-159,
-155,
-152,
-149,
-145,
-142,
-138,
-135,
-131,
-128,
-124,
-121,
-117,
-114,
-110,
-107,
-103,
-100,
-96,
-93,
-89,
-85,
-82,
-78,
-75,
-71,
-67,
-64,
-60,
-57,
-53,
-49,
-46,
-42,
-39,
-35,
-31,
-28,
-24,
-21,
-17,
-14,
-10,
-6,
-3,
-0,
--3,
--7,
--10,
--14,
--18,
--21,
--25,
--28,
--32,
--35,
--39,
--42,
--45,
--49,
--52,
--56,
--59,
--63,
--66,
--69,
--73,
--76,
--79,
--83,
--86,
--89,
--93,
--96,
--99,
--102,
--105,
--109,
--112,
--115,
--118,
--121,
--124,
--127,
--130,
--133,
--136,
--139,
--142,
--145,
--148,
--151,
--154,
--157,
--160,
--162,
--165,
--168,
--171,
--173,
--176,
--179,
--181,
--184,
--186,
--189,
--191,
--194,
--196,
--199,
--201,
--204,
--206,
--208,
--211,
--213,
--215,
--217,
--219,
--221,
--224,
--226,
--228,
--230,
--232,
--234,
--236,
--237,
--239,
--241,
--243,
--245,
--246,
--248,
--250,
--251,
--253,
--254,
--256,
--257,
--259,
--260,
--262,
--263,
--264,
--266,
--267,
--268,
--269,
--270,
--271,
--273,
--274,
--275,
--275,
--276,
--277,
--278,
--279,
--280,
--281,
--281,
--282,
--283,
--283,
--284,
--284,
--285,
--285,
--286,
--286,
--286,
--287,
--287,
--287,
--287,
--288,
--288,
--288,
--288,
--288,
--288,
--288,
--288,
--288,
--288,
--287,
--287,
--287,
--287,
--286,
--286,
--286,
--285,
--285,
--284,
--284,
--283,
--283,
--282,
--281,
--281,
--280,
--279,
--278,
--277,
--277,
--276,
--275,
--274,
--273,
--272,
--271,
--270,
--269,
--267,
--266,
--265,
--264,
--262,
--261,
--260,
--258,
--257,
--256,
--254,
--253,
--251,
--250,
--248,
--247,
--245,
--243,
--242,
--240,
--238,
--236,
--235,
--233,
--231,
--229,
--227,
--225,
--223,
--221,
--219,
--217,
--215,
--213,
--211,
--209,
--207,
--205,
--203,
--201,
--198,
--196,
--194,
--192,
--189,
--187,
--185,
--182,
--180,
--178,
--175,
--173,
--170,
--168,
--165,
--163,
--160,
--158,
--155,
--153,
--150,
--148,
--145,
--142,
--140,
--137,
--135,
--132,
--129,
--127,
--124,
--121,
--118,
--116,
--113,
--110,
--108,
--105,
--102,
--99,
--96,
--94,
--91,
--88,
--85,
--82,
--80,
--77,
--74,
--71,
--68,
--65,
--63,
--60,
--57,
--54,
--51,
--48,
--45,
--42,
--40,
--37,
--34,
--31,
--28,
--25,
--22,
--20,
--17,
--14,
--11,
--8,
--5,
--2,
-0,
-2,
-5,
-8,
-11,
-13,
-16,
-19,
-22,
-25,
-27,
-30,
-33,
-36,
-38,
-41,
-44,
-47,
-49,
-52,
-55,
-57,
-60,
-63,
-65,
-68,
-71,
-73,
-76,
-78,
-81,
-83,
-86,
-88,
-91,
-93,
-96,
-98,
-101,
-103,
-106,
-108,
-110,
-113,
-115,
-117,
-120,
-122,
-124,
-127,
-129,
-131,
-133,
-135,
-137,
-140,
-142,
-144,
-146,
-148,
-150,
-152,
-154,
-156,
-158,
-160,
-161,
-163,
-165,
-167,
-169,
-171,
-172,
-174,
-176,
-177,
-179,
-181,
-182,
-184,
-185,
-187,
-188,
-190,
-191,
-193,
-194,
-195,
-197,
-198,
-199,
-201,
-202,
-203,
-204,
-205,
-207,
-208,
-209,
-210,
-211,
-212,
-213,
-214,
-215,
-216,
-216,
-217,
-218,
-219,
-219,
-220,
-221,
-222,
-222,
-223,
-223,
-224,
-224,
-225,
-225,
-226,
-226,
-227,
-227,
-227,
-227,
-228,
-228,
-228,
-228,
-228,
-229,
-229,
-229,
-229,
-229,
-229,
-229,
-229,
-228,
-228,
-228,
-228,
-228,
-228,
-227,
-227,
-227,
-226,
-226,
-225,
-225,
-225,
-224,
-224,
-223,
-222,
-222,
-221,
-221,
-220,
-219,
-218,
-218,
-217,
-216,
-215,
-214,
-214,
-213,
-212,
-211,
-210,
-209,
-208,
-207,
-206,
-205,
-203,
-202,
-201,
-200,
-199,
-197,
-196,
-195,
-194,
-192,
-191,
-190,
-188,
-187,
-185,
-184,
-182,
-181,
-179,
-178,
-176,
-175,
-173,
-172,
-170,
-168,
-167,
-165,
-163,
-162,
-160,
-158,
-156,
-155,
-153,
-151,
-149,
-147,
-146,
-144,
-142,
-140,
-138,
-136,
-134,
-132,
-130,
-128,
-126,
-124,
-122,
-120,
-118,
-116,
-114,
-112,
-110,
-108,
-106,
-104,
-102,
-99,
-97,
-95,
-93,
-91,
-89,
-87,
-84,
-82,
-80,
-78,
-76,
-73,
-71,
-69,
-67,
-64,
-62,
-60,
-58,
-56,
-53,
-51,
-49,
-47,
-44,
-42,
-40,
-38,
-35,
-33,
-31,
-28,
-26,
-24,
-22,
-19,
-17,
-15,
-13,
-10,
-8,
-6,
-4,
-1,
-0,
--2,
--4,
--6,
--9,
--11,
--13,
--15,
--17,
--20,
--22,
--24,
--26,
--28,
--30,
--33,
--35,
--37,
--39,
--41,
--43,
--45,
--47,
--49,
--52,
--54,
--56,
--58,
--60,
--62,
--64,
--66,
--68,
--70,
--72,
--74,
--76,
--77,
--79,
--81,
--83,
--85,
--87,
--89,
--90,
--92,
--94,
--96,
--98,
--99,
--101,
--103,
--105,
--106,
--108,
--110,
--111,
--113,
--114,
--116,
--118,
--119,
--121,
--122,
--124,
--125,
--127,
--128,
--130,
--131,
--132,
--134,
--135,
--136,
--138,
--139,
--140,
--142,
--143,
--144,
--145,
--146,
--148,
--149,
--150,
--151,
--152,
--153,
--154,
--155,
--156,
--157,
--158,
--159,
--160,
--161,
--162,
--162,
--163,
--164,
--165,
--166,
--166,
--167,
--168,
--168,
--169,
--170,
--170,
--171,
--171,
--172,
--172,
--173,
--173,
--174,
--174,
--175,
--175,
--175,
--176,
--176,
--176,
--177,
--177,
--177,
--177,
--178,
--178,
--178,
--178,
--178,
--178,
--178,
--178,
--178,
--178,
--178,
--178,
--178,
--178,
--178,
--178,
--177,
--177,
--177,
--177,
--177,
--176,
--176,
--176,
--175,
--175,
--175,
--174,
--174,
--173,
--173,
--172,
--172,
--171,
--171,
--170,
--170,
--169,
--168,
--168,
--167,
--166,
--166,
--165,
--164,
--163,
--163,
--162,
--161,
--160,
--159,
--158,
--158,
--157,
--156,
--155,
--154,
--153,
--152,
--151,
--150,
--149,
--148,
--147,
--145,
--144,
--143,
--142,
--141,
--140,
--139,
--137,
--136,
--135,
--134,
--132,
--131,
--130,
--128,
--127,
--126,
--124,
--123,
--122,
--120,
--119,
--118,
--116,
--115,
--113,
--112,
--110,
--109,
--107,
--106,
--104,
--103,
--101,
--100,
--98,
--97,
--95,
--94,
--92,
--90,
--89,
--87,
--86,
--84,
--82,
--81,
--79,
--77,
--76,
--74,
--72,
--71,
--69,
--67,
--66,
--64,
--62,
--60,
--59,
--57,
--55,
--54,
--52,
--50,
--48,
--47,
--45,
--43,
--41,
--40,
--38,
--36,
--34,
--33,
--31,
--29,
--27,
--25,
--24,
--22,
--20,
--18,
--17,
--15,
--13,
--11,
--10,
--8,
--6,
--4,
--3,
--1,
-0,
-2,
-3,
-5,
-7,
-8,
-10,
-12,
-14,
-15,
-17,
-19,
-20,
-22,
-24,
-25,
-27,
-29,
-30,
-32,
-34,
-35,
-37,
-39,
-40,
-42,
-43,
-45,
-47,
-48,
-50,
-51,
-53,
-54,
-56,
-57,
-59,
-60,
-62,
-63,
-65,
-66,
-68,
-69,
-70,
-72,
-73,
-75,
-76,
-77,
-79,
-80,
-81,
-83,
-84,
-85,
-87,
-88,
-89,
-90,
-92,
-93,
-94,
-95,
-96,
-97,
-99,
-100,
-101,
-102,
-103,
-104,
-105,
-106,
-107,
-108,
-109,
-110,
-111,
-112,
-113,
-114,
-115,
-116,
-117,
-117,
-118,
-119,
-120,
-121,
-121,
-122,
-123,
-124,
-124,
-125,
-126,
-126,
-127,
-128,
-128,
-129,
-129,
-130,
-130,
-131,
-131,
-132,
-132,
-133,
-133,
-134,
-134,
-135,
-135,
-135,
-136,
-136,
-136,
-136,
-137,
-137,
-137,
-137,
-138,
-138,
-138,
-138,
-138,
-138,
-138,
-138,
-139,
-139,
-139,
-139,
-139,
-139,
-139,
-138,
-138,
-138,
-138,
-138,
-138,
-138,
-138,
-137,
-137,
-137,
-137,
-136,
-136,
-136,
-136,
-135,
-135,
-134,
-134,
-134,
-133,
-133,
-132,
-132,
-132,
-131,
-131,
-130,
-129,
-129,
-128,
-128,
-127,
-127,
-126,
-125,
-125,
-124,
-123,
-123,
-122,
-121,
-121,
-120,
-119,
-118,
-117,
-117,
-116,
-115,
-114,
-113,
-113,
-112,
-111,
-110,
-109,
-108,
-107,
-106,
-105,
-104,
-103,
-102,
-101,
-100,
-99,
-98,
-97,
-96,
-95,
-94,
-93,
-92,
-91,
-90,
-89,
-87,
-86,
-85,
-84,
-83,
-82,
-81,
-79,
-78,
-77,
-76,
-75,
-73,
-72,
-71,
-70,
-68,
-67,
-66,
-65,
-63,
-62,
-61,
-60,
-58,
-57,
-56,
-54,
-53,
-52,
-50,
-49,
-48,
-47,
-45,
-44,
-43,
-41,
-40,
-39,
-37,
-36,
-34,
-33,
-32,
-30,
-29,
-28,
-26,
-25,
-24,
-22,
-21,
-20,
-18,
-17,
-16,
-14,
-13,
-11,
-10,
-9,
-7,
-6,
-5,
-3,
-2,
-1,
-0,
--1,
--2,
--4,
--5,
--6,
--8,
--9,
--10,
--11,
--13,
--14,
--15,
--17,
--18,
--19,
--20,
--22,
--23,
--24,
--26,
--27,
--28,
--29,
--30,
--32,
--33,
--34,
--35,
--37,
--38,
--39,
--40,
--41,
--42,
--44,
--45,
--46,
--47,
--48,
--49,
--50,
--51,
--53,
--54,
--55,
--56,
--57,
--58,
--59,
--60,
--61,
--62,
--63,
--64,
--65,
--66,
--67,
--68,
--69,
--70,
--71,
--71,
--72,
--73,
--74,
--75,
--76,
--77,
--77,
--78,
--79,
--80,
--81,
--81,
--82,
--83,
--84,
--84,
--85,
--86,
--87,
--87,
--88,
--89,
--89,
--90,
--90,
--91,
--92,
--92,
--93,
--93,
--94,
--94,
--95,
--95,
--96,
--96,
--97,
--97,
--98,
--98,
--99,
--99,
--99,
--100,
--100,
--100,
--101,
--101,
--101,
--102,
--102,
--102,
--102,
--103,
--103,
--103,
--103,
--103,
--104,
--104,
--104,
--104,
--104,
--104,
--104,
--105,
--105,
--105,
--105,
--105,
--105,
--105,
--105,
--105,
--105,
--105,
--105,
--104,
--104,
--104,
--104,
--104,
--104,
--104,
--104,
--103,
--103,
--103,
--103,
--103,
--102,
--102,
--102,
--102,
--101,
--101,
--101,
--100,
--100,
--100,
--99,
--99,
--99,
--98,
--98,
--97,
--97,
--97,
--96,
--96,
--95,
--95,
--94,
--94,
--93,
--93,
--92,
--92,
--91,
--90,
--90,
--89,
--89,
--88,
--87,
--87,
--86,
--86,
--85,
--84,
--84,
--83,
--82,
--81,
--81,
--80,
--79,
--79,
--78,
--77,
--76,
--76,
--75,
--74,
--73,
--72,
--72,
--71,
--70,
--69,
--68,
--67,
--67,
--66,
--65,
--64,
--63,
--62,
--61,
--61,
--60,
--59,
--58,
--57,
--56,
--55,
--54,
--53,
--52,
--51,
--50,
--49,
--48,
--48,
--47,
--46,
--45,
--44,
--43,
--42,
--41,
--40,
--39,
--38,
--37,
--36,
--35,
--34,
--33,
--32,
--31,
--30,
--29,
--28,
--27,
--26,
--25,
--24,
--23,
--21,
--20,
--19,
--18,
--17,
--16,
--15,
--14,
--13,
--12,
--11,
--10,
--9,
--8,
--7,
--6,
--5,
--4,
--3,
--2,
--1,
-0,
-0,
-1,
-2,
-3,
-4,
-5,
-6,
-7,
-8,
-9,
-10,
-11,
-12,
-13,
-14,
-15,
-16,
-17,
-18,
-19,
-20,
-21,
-22,
-22,
-23,
-24,
-25,
-26,
-27,
-28,
-29,
-30,
-31,
-32,
-32,
-33,
-34,
-35,
-36,
-37,
-38,
-38,
-39,
-40,
-41,
-42,
-42,
-43,
-44,
-45,
-46,
-46,
-47,
-48,
-49,
-49,
-50,
-51,
-52,
-52,
-53,
-54,
-54,
-55,
-56,
-56,
-57,
-58,
-58,
-59,
-59,
-60,
-61,
-61,
-62,
-62,
-63,
-64,
-64,
-65,
-65,
-66,
-66,
-67,
-67,
-68,
-68,
-69,
-69,
-69,
-70,
-70,
-71,
-71,
-72,
-72,
-72,
-73,
-73,
-73,
-74,
-74,
-74,
-75,
-75,
-75,
-76,
-76,
-76,
-76,
-77,
-77,
-77,
-77,
-77,
-78,
-78,
-78,
-78,
-78,
-78,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-78,
-78,
-78,
-78,
-78,
-78,
-77,
-77,
-77,
-77,
-77,
-76,
-76,
-76,
-76,
-75,
-75,
-75,
-74,
-74,
-74,
-74,
-73,
-73,
-72,
-72,
-72,
-71,
-71,
-71,
-70,
-70,
-69,
-69,
-69,
-68,
-68,
-67,
-67,
-66,
-66,
-65,
-65,
-64,
-64,
-63,
-63,
-62,
-62,
-61,
-61,
-60,
-60,
-59,
-59,
-58,
-57,
-57,
-56,
-56,
-55,
-55,
-54,
-53,
-53,
-52,
-51,
-51,
-50,
-50,
-49,
-48,
-48,
-47,
-46,
-46,
-45,
-44,
-44,
-43,
-42,
-41,
-41,
-40,
-39,
-39,
-38,
-37,
-37,
-36,
-35,
-34,
-34,
-33,
-32,
-31,
-31,
-30,
-29,
-28,
-28,
-27,
-26,
-25,
-25,
-24,
-23,
-22,
-22,
-21,
-20,
-19,
-19,
-18,
-17,
-16,
-16,
-15,
-14,
-13,
-12,
-12,
-11,
-10,
-9,
-9,
-8,
-7,
-6,
-6,
-5,
-4,
-3,
-3,
-2,
-1,
-0,
-0,
-0,
--1,
--2,
--2,
--3,
--4,
--5,
--5,
--6,
--7,
--8,
--8,
--9,
--10,
--10,
--11,
--12,
--13,
--13,
--14,
--15,
--15,
--16,
--17,
--17,
--18,
--19,
--19,
--20,
--21,
--21,
--22,
--23,
--23,
--24,
--25,
--25,
--26,
--27,
--27,
--28,
--28,
--29,
--30,
--30,
--31,
--31,
--32,
--33,
--33,
--34,
--34,
--35,
--35,
--36,
--36,
--37,
--37,
--38,
--38,
--39,
--39,
--40,
--40,
--41,
--41,
--42,
--42,
--43,
--43,
--44,
--44,
--45,
--45,
--45,
--46,
--46,
--47,
--47,
--47,
--48,
--48,
--49,
--49,
--49,
--50,
--50,
--50,
--51,
--51,
--51,
--51,
--52,
--52,
--52,
--53,
--53,
--53,
--53,
--54,
--54,
--54,
--54,
--54,
--55,
--55,
--55,
--55,
--55,
--56,
--56,
--56,
--56,
--56,
--56,
--56,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--56,
--56,
--56,
--56,
--56,
--56,
--56,
--55,
--55,
--55,
--55,
--55,
--54,
--54,
--54,
--54,
--54,
--53,
--53,
--53,
--53,
--52,
--52,
--52,
--52,
--51,
--51,
--51,
--50,
--50,
--50,
--50,
--49,
--49,
--49,
--48,
--48,
--48,
--47,
--47,
--46,
--46,
--46,
--45,
--45,
--45,
--44,
--44,
--43,
--43,
--43,
--42,
--42,
--41,
--41,
--40,
--40,
--40,
--39,
--39,
--38,
--38,
--37,
--37,
--36,
--36,
--35,
--35,
--35,
--34,
--34,
--33,
--33,
--32,
--32,
--31,
--31,
--30,
--30,
--29,
--29,
--28,
--28,
--27,
--26,
--26,
--25,
--25,
--24,
--24,
--23,
--23,
--22,
--22,
--21,
--21,
--20,
--19,
--19,
--18,
--18,
--17,
--17,
--16,
--16,
--15,
--15,
--14,
--13,
--13,
--12,
--12,
--11,
--11,
--10,
--9,
--9,
--8,
--8,
--7,
--7,
--6,
--6,
--5,
--4,
--4,
--3,
--3,
--2,
--2,
--1,
--1,
-0,
-0,
-0,
-1,
-1,
-2,
-2,
-3,
-3,
-4,
-4,
-5,
-5,
-6,
-7,
-7,
-8,
-8,
-9,
-9,
-10,
-10,
-11,
-11,
-12,
-12,
-13,
-13,
-14,
-14,
-15,
-15,
-16,
-16,
-17,
-17,
-18,
-18,
-18,
-19,
-19,
-20,
-20,
-21,
-21,
-22,
-22,
-22,
-23,
-23,
-24,
-24,
-25,
-25,
-25,
-26,
-26,
-27,
-27,
-27,
-28,
-28,
-28,
-29,
-29,
-30,
-30,
-30,
-31,
-31,
-31,
-32,
-32,
-32,
-33,
-33,
-33,
-33,
-34,
-34,
-34,
-35,
-35,
-35,
-35,
-36,
-36,
-36,
-36,
-37,
-37,
-37,
-37,
-38,
-38,
-38,
-38,
-38,
-39,
-39,
-39,
-39,
-39,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-41,
-41,
-41,
-41,
-41,
-41,
-41,
-41,
-41,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-41,
-41,
-41,
-41,
-41,
-41,
-41,
-41,
-41,
-41,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-39,
-39,
-39,
-39,
-39,
-38,
-38,
-38,
-38,
-38,
-37,
-37,
-37,
-37,
-37,
-36,
-36,
-36,
-36,
-35,
-35,
-35,
-35,
-34,
-34,
-34,
-34,
-33,
-33,
-33,
-33,
-32,
-32,
-32,
-31,
-31,
-31,
-30,
-30,
-30,
-30,
-29,
-29,
-29,
-28,
-28,
-28,
-27,
-27,
-27,
-26,
-26,
-26,
-25,
-25,
-25,
-24,
-24,
-23,
-23,
-23,
-22,
-22,
-22,
-21,
-21,
-21,
-20,
-20,
-19,
-19,
-19,
-18,
-18,
-18,
-17,
-17,
-16,
-16,
-16,
-15,
-15,
-14,
-14,
-14,
-13,
-13,
-12,
-12,
-12,
-11,
-11,
-10,
-10,
-10,
-9,
-9,
-8,
-8,
-8,
-7,
-7,
-6,
-6,
-6,
-5,
-5,
-4,
-4,
-4,
-3,
-3,
-2,
-2,
-2,
-1,
-1,
-1,
-0,
-0,
-0,
-0,
-0,
--1,
--1,
--2,
--2,
--2,
--3,
--3,
--3,
--4,
--4,
--5,
--5,
--5,
--6,
--6,
--6,
--7,
--7,
--7,
--8,
--8,
--9,
--9,
--9,
--10,
--10,
--10,
--11,
--11,
--11,
--12,
--12,
--12,
--13,
--13,
--13,
--14,
--14,
--14,
--14,
--15,
--15,
--15,
--16,
--16,
--16,
--17,
--17,
--17,
--17,
--18,
--18,
--18,
--19,
--19,
--19,
--19,
--20,
--20,
--20,
--20,
--21,
--21,
--21,
--21,
--21,
--22,
--22,
--22,
--22,
--23,
--23,
--23,
--23,
--23,
--24,
--24,
--24,
--24,
--24,
--25,
--25,
--25,
--25,
--25,
--25,
--26,
--26,
--26,
--26,
--26,
--26,
--26,
--27,
--27,
--27,
--27,
--27,
--27,
--27,
--27,
--27,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--27,
--27,
--27,
--27,
--27,
--27,
--27,
--27,
--27,
--27,
--26,
--26,
--26,
--26,
--26,
--26,
--26,
--25,
--25,
--25,
--25,
--25,
--25,
--25,
--24,
--24,
--24,
--24,
--24,
--24,
--23,
--23,
--23,
--23,
--23,
--22,
--22,
--22,
--22,
--22,
--21,
--21,
--21,
--21,
--21,
--20,
--20,
--20,
--20,
--20,
--19,
--19,
--19,
--19,
--18,
--18,
--18,
--18,
--17,
--17,
--17,
--17,
--16,
--16,
--16,
--16,
--15,
--15,
--15,
--15,
--14,
--14,
--14,
--14,
--13,
--13,
--13,
--13,
--12,
--12,
--12,
--12,
--11,
--11,
--11,
--11,
--10,
--10,
--10,
--9,
--9,
--9,
--9,
--8,
--8,
--8,
--7,
--7,
--7,
--7,
--6,
--6,
--6,
--6,
--5,
--5,
--5,
--4,
--4,
--4,
--4,
--3,
--3,
--3,
--2,
--2,
--2,
--2,
--1,
--1,
--1,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-1,
-1,
-1,
-2,
-2,
-2,
-2,
-3,
-3,
-3,
-3,
-4,
-4,
-4,
-5,
-5,
-5,
-5,
-6,
-6,
-6,
-6,
-6,
-7,
-7,
-7,
-7,
-8,
-8,
-8,
-8,
-9,
-9,
-9,
-9,
-10,
-10,
-10,
-10,
-10,
-11,
-11,
-11,
-11,
-11,
-12,
-12,
-12,
-12,
-12,
-13,
-13,
-13,
-13,
-13,
-14,
-14,
-14,
-14,
-14,
-14,
-15,
-15,
-15,
-15,
-15,
-15,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-17,
-17,
-17,
-17,
-17,
-17,
-17,
-17,
-18,
-18,
-18,
-18,
-18,
-18,
-18,
-18,
-18,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-18,
-18,
-18,
-18,
-18,
-18,
-18,
-18,
-18,
-18,
-17,
-17,
-17,
-17,
-17,
-17,
-17,
-17,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-15,
-15,
-15,
-15,
-15,
-15,
-15,
-14,
-14,
-14,
-14,
-14,
-14,
-14,
-13,
-13,
-13,
-13,
-13,
-13,
-12,
-12,
-12,
-12,
-12,
-12,
-11,
-11,
-11,
-11,
-11,
-11,
-10,
-10,
-10,
-10,
-10,
-9,
-9,
-9,
-9,
-9,
-9,
-8,
-8,
-8,
-8,
-8,
-7,
-7,
-7,
-7,
-7,
-7,
-6,
-6,
-6,
-6,
-6,
-5,
-5,
-5,
-5,
-5,
-4,
-4,
-4,
-4,
-4,
-4,
-3,
-3,
-3,
-3,
-3,
-2,
-2,
-2,
-2,
-2,
-2,
-1,
-1,
-1,
-1,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
--1,
--1,
--1,
--1,
--1,
--2,
--2,
--2,
--2,
--2,
--2,
--3,
--3,
--3,
--3,
--3,
--3,
--4,
--4,
--4,
--4,
--4,
--4,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--6,
--6,
--6,
--6,
--6,
--6,
--6,
--7,
--7,
--7,
--7,
--7,
--7,
--7,
--7,
--8,
--8,
--8,
--8,
--8,
--8,
--8,
--8,
--9,
--9,
--9,
--9,
--9,
--9,
--9,
--9,
--9,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--9,
--9,
--9,
--9,
--9,
--9,
--9,
--9,
--9,
--9,
--9,
--8,
--8,
--8,
--8,
--8,
--8,
--8,
--8,
--8,
--8,
--7,
--7,
--7,
--7,
--7,
--7,
--7,
--7,
--7,
--6,
--6,
--6,
--6,
--6,
--6,
--6,
--6,
--6,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0};
-
-static const RES_HWORD LARGE_FILTER_IMPD[] /* Impulse response differences */ = {
--1,
--2,
--3,
--5,
--6,
--7,
--9,
--10,
--11,
--13,
--14,
--15,
--17,
--18,
--19,
--21,
--22,
--23,
--25,
--26,
--27,
--28,
--30,
--32,
--32,
--34,
--35,
--36,
--38,
--39,
--40,
--42,
--43,
--44,
--45,
--47,
--48,
--49,
--51,
--52,
--53,
--54,
--56,
--56,
--58,
--60,
--60,
--62,
--63,
--64,
--66,
--66,
--68,
--69,
--70,
--72,
--72,
--74,
--75,
--76,
--77,
--79,
--79,
--81,
--82,
--83,
--84,
--85,
--87,
--87,
--89,
--90,
--90,
--92,
--93,
--94,
--95,
--96,
--98,
--98,
--99,
--100,
--102,
--102,
--103,
--105,
--105,
--106,
--108,
--108,
--109,
--110,
--111,
--112,
--113,
--114,
--115,
--116,
--116,
--118,
--118,
--119,
--121,
--120,
--122,
--123,
--123,
--125,
--125,
--126,
--126,
--128,
--128,
--129,
--130,
--130,
--132,
--132,
--132,
--134,
--134,
--135,
--135,
--136,
--137,
--137,
--138,
--139,
--139,
--140,
--141,
--141,
--142,
--142,
--143,
--143,
--144,
--145,
--145,
--145,
--146,
--147,
--147,
--147,
--148,
--149,
--148,
--150,
--149,
--150,
--151,
--151,
--151,
--152,
--152,
--152,
--153,
--153,
--153,
--153,
--154,
--154,
--155,
--155,
--155,
--155,
--155,
--156,
--156,
--156,
--156,
--156,
--157,
--157,
--157,
--157,
--157,
--157,
--157,
--158,
--157,
--158,
--158,
--157,
--158,
--158,
--158,
--158,
--157,
--158,
--158,
--158,
--157,
--158,
--158,
--157,
--158,
--157,
--157,
--157,
--157,
--157,
--157,
--157,
--156,
--156,
--156,
--156,
--156,
--155,
--155,
--155,
--155,
--155,
--154,
--154,
--153,
--154,
--153,
--153,
--152,
--152,
--152,
--151,
--151,
--151,
--150,
--150,
--150,
--149,
--149,
--148,
--148,
--147,
--147,
--147,
--146,
--145,
--145,
--145,
--144,
--144,
--143,
--142,
--142,
--142,
--141,
--140,
--140,
--139,
--139,
--138,
--137,
--137,
--136,
--136,
--135,
--134,
--134,
--133,
--132,
--132,
--131,
--130,
--130,
--129,
--128,
--128,
--126,
--126,
--126,
--125,
--123,
--124,
--122,
--122,
--121,
--120,
--119,
--119,
--117,
--117,
--117,
--115,
--114,
--113,
--113,
--112,
--112,
--110,
--110,
--108,
--108,
--107,
--106,
--106,
--104,
--104,
--102,
--102,
--101,
--100,
--99,
--98,
--98,
--96,
--95,
--95,
--94,
--92,
--92,
--91,
--90,
--89,
--88,
--87,
--86,
--85,
--85,
--83,
--82,
--82,
--80,
--80,
--78,
--78,
--76,
--76,
--75,
--73,
--73,
--72,
--70,
--70,
--69,
--68,
--66,
--66,
--65,
--64,
--63,
--61,
--61,
--60,
--59,
--58,
--57,
--56,
--55,
--54,
--53,
--51,
--51,
--50,
--49,
--48,
--47,
--46,
--45,
--44,
--43,
--42,
--41,
--41,
--39,
--38,
--37,
--36,
--35,
--34,
--34,
--32,
--31,
--31,
--29,
--28,
--28,
--26,
--26,
--24,
--24,
--23,
--21,
--21,
--20,
--19,
--18,
--17,
--16,
--15,
--14,
--13,
--13,
--11,
--11,
--9,
--9,
--8,
--7,
--6,
--5,
--5,
--3,
--2,
--2,
--1,
-0,
-1,
-2,
-2,
-4,
-4,
-5,
-6,
-7,
-8,
-8,
-10,
-10,
-11,
-11,
-13,
-13,
-14,
-15,
-15,
-17,
-17,
-18,
-18,
-20,
-20,
-21,
-21,
-23,
-23,
-23,
-25,
-25,
-26,
-26,
-27,
-28,
-28,
-30,
-29,
-31,
-31,
-32,
-32,
-33,
-34,
-34,
-35,
-35,
-36,
-37,
-37,
-37,
-39,
-39,
-39,
-40,
-40,
-41,
-42,
-42,
-42,
-43,
-44,
-44,
-44,
-45,
-46,
-45,
-47,
-46,
-48,
-47,
-48,
-49,
-49,
-49,
-49,
-50,
-51,
-51,
-51,
-51,
-52,
-52,
-53,
-53,
-53,
-53,
-54,
-54,
-54,
-55,
-55,
-55,
-55,
-56,
-56,
-56,
-56,
-57,
-57,
-57,
-57,
-58,
-57,
-58,
-58,
-58,
-58,
-59,
-58,
-59,
-59,
-59,
-59,
-59,
-59,
-59,
-60,
-59,
-60,
-59,
-60,
-60,
-60,
-59,
-60,
-60,
-60,
-60,
-59,
-60,
-60,
-60,
-60,
-59,
-60,
-60,
-59,
-60,
-59,
-60,
-59,
-59,
-59,
-59,
-59,
-59,
-59,
-58,
-59,
-58,
-58,
-58,
-58,
-57,
-58,
-57,
-57,
-57,
-57,
-55,
-57,
-56,
-56,
-55,
-56,
-55,
-55,
-54,
-55,
-54,
-54,
-54,
-53,
-53,
-53,
-52,
-53,
-52,
-51,
-52,
-51,
-50,
-51,
-50,
-49,
-50,
-49,
-48,
-49,
-48,
-47,
-47,
-47,
-47,
-46,
-46,
-45,
-45,
-45,
-44,
-44,
-43,
-43,
-42,
-43,
-41,
-42,
-40,
-41,
-40,
-39,
-40,
-38,
-39,
-37,
-38,
-37,
-36,
-36,
-35,
-36,
-34,
-34,
-34,
-33,
-33,
-32,
-32,
-31,
-31,
-30,
-30,
-29,
-29,
-28,
-28,
-27,
-27,
-26,
-26,
-25,
-25,
-24,
-24,
-24,
-22,
-23,
-21,
-21,
-21,
-20,
-20,
-19,
-19,
-18,
-18,
-17,
-16,
-16,
-16,
-15,
-14,
-14,
-14,
-13,
-12,
-12,
-11,
-11,
-11,
-9,
-10,
-8,
-9,
-7,
-8,
-6,
-7,
-5,
-5,
-5,
-4,
-4,
-3,
-3,
-2,
-1,
-1,
-1,
-0,
-0,
--1,
--1,
--2,
--3,
--3,
--3,
--4,
--4,
--5,
--5,
--6,
--6,
--7,
--7,
--8,
--8,
--8,
--9,
--10,
--10,
--10,
--11,
--11,
--12,
--12,
--13,
--13,
--14,
--14,
--14,
--15,
--15,
--16,
--16,
--16,
--17,
--18,
--17,
--18,
--19,
--19,
--19,
--20,
--20,
--21,
--20,
--22,
--21,
--22,
--23,
--22,
--23,
--24,
--23,
--25,
--24,
--25,
--25,
--25,
--26,
--26,
--27,
--26,
--27,
--28,
--27,
--28,
--28,
--29,
--29,
--29,
--29,
--30,
--30,
--30,
--30,
--31,
--31,
--31,
--31,
--32,
--32,
--32,
--32,
--33,
--33,
--33,
--33,
--33,
--34,
--34,
--34,
--34,
--34,
--35,
--34,
--35,
--35,
--35,
--36,
--35,
--36,
--35,
--36,
--36,
--36,
--37,
--36,
--36,
--37,
--37,
--36,
--37,
--37,
--37,
--37,
--37,
--38,
--37,
--37,
--38,
--37,
--38,
--37,
--38,
--37,
--38,
--38,
--37,
--38,
--38,
--37,
--38,
--38,
--37,
--38,
--38,
--37,
--38,
--37,
--38,
--37,
--38,
--37,
--38,
--37,
--37,
--37,
--37,
--37,
--37,
--37,
--37,
--35,
--37,
--36,
--37,
--36,
--36,
--36,
--36,
--36,
--35,
--36,
--35,
--36,
--35,
--35,
--34,
--35,
--34,
--35,
--34,
--34,
--34,
--33,
--34,
--33,
--33,
--33,
--32,
--33,
--32,
--32,
--32,
--32,
--31,
--31,
--31,
--31,
--31,
--30,
--30,
--30,
--29,
--30,
--29,
--29,
--28,
--28,
--29,
--27,
--28,
--27,
--27,
--27,
--26,
--27,
--25,
--26,
--25,
--26,
--24,
--25,
--24,
--24,
--23,
--24,
--23,
--22,
--23,
--22,
--22,
--21,
--21,
--21,
--21,
--20,
--20,
--19,
--19,
--19,
--19,
--18,
--18,
--18,
--17,
--17,
--17,
--16,
--16,
--15,
--16,
--14,
--15,
--14,
--14,
--14,
--13,
--13,
--12,
--12,
--12,
--12,
--11,
--10,
--11,
--10,
--10,
--9,
--9,
--9,
--8,
--8,
--8,
--7,
--7,
--6,
--6,
--6,
--6,
--5,
--5,
--4,
--4,
--4,
--3,
--3,
--3,
--2,
--2,
--2,
--1,
--1,
--1,
-0,
-0,
-0,
-1,
-1,
-2,
-1,
-3,
-2,
-3,
-3,
-4,
-3,
-4,
-5,
-5,
-5,
-5,
-6,
-6,
-7,
-6,
-8,
-7,
-8,
-8,
-8,
-9,
-9,
-9,
-10,
-9,
-11,
-10,
-11,
-11,
-11,
-12,
-12,
-12,
-13,
-13,
-13,
-13,
-14,
-14,
-14,
-14,
-15,
-15,
-15,
-16,
-16,
-16,
-16,
-17,
-16,
-18,
-17,
-17,
-18,
-18,
-18,
-19,
-19,
-19,
-19,
-19,
-20,
-19,
-20,
-21,
-20,
-21,
-21,
-21,
-21,
-21,
-22,
-22,
-22,
-22,
-22,
-23,
-22,
-23,
-23,
-23,
-23,
-24,
-24,
-23,
-24,
-24,
-24,
-25,
-24,
-25,
-24,
-25,
-25,
-25,
-25,
-26,
-25,
-26,
-25,
-26,
-26,
-25,
-26,
-26,
-26,
-27,
-26,
-26,
-27,
-26,
-27,
-26,
-27,
-26,
-27,
-27,
-27,
-26,
-27,
-27,
-27,
-27,
-27,
-27,
-27,
-27,
-27,
-27,
-27,
-27,
-27,
-27,
-27,
-27,
-27,
-26,
-27,
-27,
-27,
-27,
-26,
-27,
-27,
-26,
-26,
-26,
-27,
-26,
-26,
-27,
-26,
-26,
-26,
-26,
-26,
-26,
-25,
-26,
-25,
-26,
-25,
-25,
-25,
-25,
-25,
-25,
-25,
-24,
-24,
-25,
-24,
-24,
-24,
-23,
-24,
-24,
-23,
-23,
-23,
-23,
-23,
-22,
-23,
-22,
-22,
-22,
-22,
-21,
-22,
-21,
-21,
-21,
-21,
-20,
-20,
-21,
-20,
-19,
-20,
-19,
-19,
-19,
-19,
-19,
-18,
-18,
-18,
-18,
-18,
-17,
-17,
-17,
-17,
-16,
-16,
-16,
-16,
-16,
-15,
-15,
-15,
-14,
-15,
-14,
-14,
-14,
-13,
-13,
-13,
-13,
-12,
-13,
-12,
-11,
-12,
-11,
-11,
-11,
-10,
-11,
-10,
-9,
-10,
-9,
-9,
-9,
-8,
-9,
-8,
-7,
-8,
-7,
-7,
-7,
-6,
-6,
-6,
-6,
-5,
-5,
-5,
-5,
-4,
-4,
-4,
-3,
-4,
-3,
-3,
-2,
-2,
-2,
-2,
-2,
-1,
-1,
-0,
-1,
-0,
-0,
-0,
--1,
--1,
--1,
--1,
--2,
--2,
--2,
--2,
--3,
--2,
--4,
--3,
--3,
--4,
--4,
--5,
--4,
--5,
--5,
--5,
--6,
--6,
--6,
--6,
--7,
--6,
--7,
--7,
--8,
--7,
--8,
--8,
--9,
--8,
--9,
--9,
--9,
--10,
--9,
--10,
--10,
--10,
--11,
--10,
--11,
--11,
--12,
--11,
--12,
--12,
--12,
--12,
--13,
--12,
--13,
--13,
--13,
--14,
--13,
--14,
--14,
--14,
--14,
--15,
--14,
--15,
--15,
--15,
--15,
--16,
--15,
--16,
--16,
--16,
--16,
--16,
--17,
--16,
--17,
--17,
--17,
--17,
--17,
--18,
--17,
--18,
--18,
--17,
--18,
--18,
--19,
--18,
--18,
--19,
--18,
--19,
--19,
--19,
--19,
--19,
--19,
--19,
--19,
--20,
--19,
--20,
--19,
--20,
--20,
--20,
--19,
--20,
--20,
--20,
--20,
--20,
--21,
--20,
--20,
--20,
--21,
--20,
--20,
--21,
--20,
--21,
--20,
--20,
--21,
--20,
--21,
--20,
--21,
--20,
--21,
--20,
--21,
--21,
--20,
--20,
--21,
--20,
--21,
--20,
--21,
--20,
--20,
--20,
--20,
--20,
--20,
--20,
--20,
--20,
--20,
--20,
--20,
--20,
--20,
--19,
--20,
--20,
--19,
--20,
--19,
--19,
--19,
--20,
--19,
--19,
--18,
--19,
--19,
--19,
--18,
--18,
--19,
--18,
--18,
--18,
--18,
--18,
--18,
--17,
--18,
--17,
--17,
--17,
--17,
--17,
--17,
--16,
--17,
--16,
--16,
--17,
--15,
--16,
--16,
--15,
--16,
--15,
--15,
--15,
--15,
--15,
--14,
--14,
--15,
--14,
--13,
--14,
--14,
--13,
--13,
--13,
--13,
--13,
--13,
--12,
--12,
--12,
--12,
--12,
--11,
--12,
--11,
--11,
--11,
--10,
--11,
--10,
--10,
--10,
--9,
--10,
--9,
--9,
--9,
--9,
--9,
--8,
--8,
--8,
--8,
--8,
--7,
--7,
--7,
--7,
--7,
--6,
--6,
--6,
--6,
--6,
--5,
--5,
--6,
--4,
--5,
--4,
--5,
--4,
--4,
--3,
--4,
--3,
--3,
--3,
--2,
--3,
--2,
--2,
--2,
--1,
--2,
--1,
--1,
--1,
-0,
--1,
-0,
-0,
-0,
-1,
-0,
-1,
-1,
-1,
-1,
-2,
-2,
-2,
-2,
-2,
-3,
-3,
-2,
-4,
-3,
-3,
-4,
-4,
-4,
-4,
-5,
-4,
-5,
-5,
-5,
-6,
-5,
-6,
-6,
-6,
-6,
-7,
-6,
-7,
-7,
-7,
-7,
-8,
-7,
-8,
-8,
-8,
-8,
-9,
-8,
-9,
-9,
-9,
-9,
-10,
-9,
-10,
-10,
-10,
-10,
-10,
-11,
-10,
-11,
-11,
-11,
-11,
-11,
-11,
-12,
-11,
-12,
-12,
-12,
-12,
-12,
-13,
-12,
-13,
-13,
-12,
-13,
-13,
-14,
-13,
-13,
-14,
-13,
-14,
-14,
-13,
-14,
-14,
-15,
-14,
-14,
-14,
-15,
-14,
-15,
-15,
-14,
-15,
-15,
-15,
-15,
-15,
-16,
-15,
-15,
-15,
-16,
-15,
-16,
-15,
-16,
-15,
-16,
-16,
-16,
-15,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-17,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-15,
-16,
-16,
-16,
-16,
-16,
-15,
-16,
-16,
-15,
-16,
-16,
-15,
-15,
-16,
-15,
-16,
-15,
-15,
-15,
-15,
-15,
-15,
-15,
-15,
-15,
-14,
-15,
-14,
-15,
-14,
-14,
-15,
-14,
-14,
-14,
-14,
-13,
-14,
-14,
-13,
-13,
-14,
-13,
-13,
-13,
-13,
-13,
-12,
-13,
-12,
-13,
-12,
-12,
-12,
-12,
-12,
-12,
-11,
-12,
-11,
-11,
-11,
-11,
-11,
-11,
-10,
-11,
-10,
-10,
-10,
-10,
-10,
-10,
-9,
-10,
-9,
-9,
-9,
-9,
-8,
-9,
-8,
-9,
-8,
-8,
-8,
-7,
-8,
-7,
-7,
-7,
-7,
-7,
-7,
-6,
-7,
-6,
-6,
-6,
-5,
-6,
-5,
-5,
-6,
-4,
-5,
-5,
-4,
-5,
-4,
-4,
-4,
-3,
-4,
-3,
-3,
-3,
-3,
-3,
-2,
-3,
-2,
-2,
-2,
-2,
-1,
-2,
-1,
-1,
-1,
-1,
-1,
-0,
-0,
-1,
-0,
--1,
-0,
-0,
--1,
--1,
--1,
--1,
--1,
--2,
--1,
--2,
--2,
--2,
--2,
--2,
--3,
--2,
--3,
--3,
--3,
--3,
--4,
--3,
--4,
--4,
--4,
--4,
--4,
--5,
--4,
--5,
--5,
--5,
--5,
--5,
--6,
--5,
--6,
--6,
--6,
--6,
--6,
--6,
--7,
--6,
--7,
--7,
--7,
--7,
--7,
--7,
--8,
--8,
--7,
--8,
--8,
--8,
--8,
--9,
--8,
--9,
--8,
--9,
--9,
--9,
--9,
--9,
--9,
--10,
--9,
--10,
--9,
--10,
--10,
--10,
--10,
--10,
--10,
--11,
--10,
--11,
--10,
--11,
--11,
--11,
--10,
--11,
--11,
--12,
--11,
--11,
--11,
--12,
--11,
--12,
--12,
--11,
--12,
--12,
--12,
--11,
--12,
--12,
--13,
--12,
--12,
--12,
--12,
--13,
--12,
--12,
--13,
--12,
--13,
--12,
--13,
--12,
--13,
--13,
--12,
--13,
--13,
--13,
--12,
--13,
--13,
--13,
--13,
--12,
--13,
--13,
--13,
--13,
--13,
--13,
--12,
--13,
--13,
--13,
--13,
--13,
--13,
--13,
--12,
--13,
--13,
--13,
--13,
--11,
--13,
--13,
--12,
--13,
--13,
--12,
--13,
--12,
--13,
--12,
--13,
--12,
--13,
--12,
--12,
--13,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--11,
--12,
--12,
--11,
--12,
--11,
--11,
--12,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--10,
--11,
--10,
--11,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--9,
--10,
--9,
--9,
--9,
--9,
--9,
--9,
--9,
--9,
--8,
--9,
--8,
--8,
--8,
--8,
--8,
--8,
--8,
--8,
--7,
--7,
--8,
--7,
--7,
--7,
--7,
--6,
--7,
--7,
--6,
--6,
--6,
--6,
--6,
--6,
--6,
--5,
--6,
--5,
--5,
--5,
--5,
--5,
--4,
--5,
--4,
--5,
--4,
--4,
--4,
--4,
--3,
--4,
--3,
--4,
--3,
--3,
--3,
--3,
--2,
--3,
--2,
--2,
--3,
--2,
--1,
--2,
--2,
--1,
--2,
--1,
--1,
--1,
--1,
--1,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-1,
-1,
-0,
-2,
-1,
-1,
-1,
-2,
-2,
-1,
-2,
-2,
-3,
-2,
-2,
-3,
-2,
-3,
-3,
-3,
-3,
-3,
-4,
-3,
-4,
-4,
-3,
-4,
-4,
-4,
-5,
-4,
-5,
-4,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-6,
-5,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-7,
-6,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-8,
-7,
-8,
-8,
-7,
-8,
-8,
-8,
-8,
-8,
-8,
-9,
-8,
-9,
-8,
-9,
-8,
-9,
-9,
-8,
-9,
-9,
-9,
-9,
-9,
-10,
-9,
-9,
-9,
-10,
-9,
-10,
-9,
-10,
-10,
-9,
-10,
-10,
-9,
-10,
-10,
-10,
-10,
-10,
-10,
-10,
-10,
-10,
-10,
-11,
-10,
-10,
-10,
-10,
-11,
-10,
-10,
-11,
-10,
-10,
-11,
-10,
-10,
-11,
-10,
-10,
-11,
-10,
-11,
-10,
-11,
-10,
-10,
-11,
-10,
-10,
-11,
-10,
-11,
-10,
-10,
-10,
-10,
-10,
-10,
-11,
-10,
-10,
-10,
-10,
-11,
-10,
-10,
-10,
-10,
-10,
-10,
-10,
-10,
-9,
-10,
-10,
-10,
-9,
-10,
-10,
-9,
-10,
-9,
-10,
-9,
-9,
-10,
-9,
-9,
-9,
-9,
-9,
-9,
-9,
-9,
-9,
-8,
-9,
-9,
-8,
-9,
-8,
-8,
-9,
-8,
-8,
-8,
-8,
-8,
-8,
-7,
-8,
-8,
-7,
-8,
-7,
-7,
-8,
-7,
-7,
-7,
-7,
-6,
-7,
-7,
-6,
-7,
-6,
-7,
-6,
-6,
-6,
-6,
-6,
-6,
-5,
-6,
-5,
-6,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-4,
-5,
-4,
-5,
-4,
-4,
-4,
-4,
-4,
-4,
-3,
-4,
-3,
-4,
-3,
-3,
-3,
-3,
-3,
-3,
-2,
-3,
-2,
-2,
-3,
-2,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--3,
--2,
--3,
--2,
--3,
--3,
--3,
--3,
--3,
--3,
--4,
--3,
--4,
--3,
--4,
--4,
--3,
--4,
--4,
--5,
--4,
--4,
--4,
--5,
--4,
--5,
--5,
--5,
--4,
--5,
--5,
--6,
--5,
--5,
--5,
--6,
--5,
--6,
--5,
--6,
--6,
--6,
--6,
--6,
--6,
--6,
--6,
--6,
--7,
--6,
--6,
--7,
--6,
--7,
--7,
--6,
--7,
--7,
--7,
--7,
--7,
--7,
--7,
--7,
--8,
--7,
--7,
--8,
--7,
--8,
--7,
--8,
--7,
--8,
--7,
--8,
--8,
--8,
--8,
--7,
--8,
--8,
--8,
--8,
--8,
--8,
--8,
--8,
--9,
--8,
--8,
--8,
--8,
--9,
--8,
--8,
--8,
--9,
--8,
--8,
--9,
--8,
--9,
--8,
--8,
--9,
--8,
--9,
--8,
--9,
--8,
--8,
--9,
--8,
--9,
--8,
--9,
--8,
--9,
--8,
--8,
--9,
--8,
--9,
--8,
--7,
--9,
--8,
--8,
--9,
--8,
--8,
--9,
--8,
--8,
--8,
--8,
--8,
--9,
--8,
--8,
--8,
--8,
--8,
--8,
--8,
--8,
--7,
--8,
--8,
--8,
--7,
--8,
--8,
--7,
--8,
--7,
--8,
--7,
--8,
--7,
--7,
--7,
--8,
--7,
--7,
--7,
--7,
--7,
--7,
--7,
--6,
--7,
--7,
--6,
--7,
--7,
--6,
--6,
--7,
--6,
--6,
--6,
--6,
--6,
--6,
--6,
--6,
--6,
--6,
--5,
--6,
--5,
--6,
--5,
--5,
--6,
--5,
--5,
--5,
--5,
--5,
--4,
--5,
--5,
--4,
--5,
--4,
--5,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--3,
--4,
--3,
--4,
--3,
--3,
--3,
--4,
--3,
--2,
--3,
--3,
--3,
--2,
--3,
--2,
--3,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--1,
--2,
--1,
--2,
--1,
--1,
--1,
--2,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-2,
-1,
-2,
-1,
-2,
-2,
-2,
-1,
-2,
-2,
-3,
-2,
-2,
-2,
-3,
-2,
-3,
-3,
-2,
-3,
-3,
-3,
-3,
-3,
-3,
-4,
-3,
-3,
-4,
-3,
-4,
-3,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-5,
-4,
-4,
-5,
-5,
-4,
-5,
-5,
-4,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-6,
-5,
-5,
-5,
-6,
-5,
-6,
-5,
-6,
-6,
-5,
-6,
-6,
-6,
-5,
-6,
-6,
-6,
-6,
-6,
-6,
-7,
-6,
-6,
-6,
-6,
-7,
-6,
-6,
-7,
-6,
-7,
-6,
-6,
-7,
-7,
-6,
-7,
-6,
-7,
-6,
-7,
-7,
-7,
-6,
-7,
-7,
-6,
-7,
-7,
-7,
-7,
-6,
-7,
-7,
-7,
-7,
-7,
-6,
-7,
-7,
-7,
-7,
-7,
-7,
-6,
-7,
-7,
-7,
-7,
-7,
-7,
-6,
-7,
-7,
-6,
-7,
-6,
-7,
-7,
-7,
-6,
-7,
-7,
-6,
-7,
-7,
-6,
-7,
-7,
-6,
-7,
-6,
-7,
-6,
-7,
-6,
-6,
-7,
-6,
-6,
-7,
-6,
-6,
-6,
-6,
-6,
-7,
-6,
-6,
-6,
-6,
-5,
-6,
-6,
-6,
-6,
-5,
-6,
-6,
-5,
-6,
-5,
-6,
-5,
-5,
-6,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-4,
-5,
-4,
-5,
-4,
-5,
-4,
-4,
-4,
-5,
-4,
-4,
-4,
-4,
-3,
-4,
-4,
-4,
-3,
-4,
-3,
-4,
-3,
-3,
-4,
-3,
-3,
-3,
-3,
-3,
-3,
-2,
-3,
-3,
-2,
-3,
-2,
-3,
-2,
-2,
-3,
-2,
-2,
-2,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-1,
-2,
-1,
-1,
-1,
-2,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
--1,
--1,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--2,
--2,
--1,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--3,
--2,
--2,
--3,
--2,
--3,
--2,
--3,
--3,
--2,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--4,
--3,
--3,
--4,
--3,
--4,
--3,
--4,
--3,
--4,
--4,
--3,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--5,
--4,
--4,
--5,
--4,
--4,
--5,
--4,
--5,
--4,
--5,
--5,
--4,
--5,
--5,
--4,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--6,
--5,
--5,
--5,
--5,
--6,
--5,
--5,
--6,
--5,
--5,
--6,
--5,
--6,
--5,
--6,
--5,
--6,
--5,
--5,
--6,
--6,
--5,
--6,
--5,
--6,
--5,
--6,
--5,
--6,
--5,
--6,
--6,
--5,
--6,
--5,
--6,
--5,
--6,
--5,
--6,
--6,
--5,
--6,
--5,
--5,
--5,
--6,
--5,
--6,
--5,
--6,
--5,
--5,
--6,
--5,
--6,
--5,
--5,
--6,
--5,
--5,
--6,
--5,
--5,
--5,
--6,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--4,
--5,
--5,
--5,
--4,
--5,
--5,
--4,
--5,
--4,
--5,
--4,
--4,
--5,
--4,
--4,
--5,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--3,
--4,
--4,
--3,
--4,
--4,
--3,
--4,
--3,
--3,
--4,
--3,
--3,
--3,
--4,
--3,
--3,
--3,
--3,
--3,
--2,
--3,
--3,
--3,
--2,
--3,
--2,
--3,
--2,
--3,
--2,
--2,
--3,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--1,
--2,
--2,
--1,
--2,
--2,
--1,
--1,
--2,
--1,
--1,
--1,
--2,
--1,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-1,
-2,
-1,
-1,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-2,
-1,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-3,
-2,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-3,
-4,
-3,
-3,
-4,
-3,
-4,
-3,
-4,
-3,
-4,
-3,
-4,
-4,
-3,
-4,
-4,
-4,
-4,
-3,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-5,
-4,
-4,
-4,
-4,
-5,
-4,
-4,
-4,
-5,
-4,
-4,
-5,
-4,
-4,
-5,
-4,
-5,
-4,
-4,
-5,
-4,
-5,
-4,
-5,
-4,
-4,
-5,
-4,
-5,
-4,
-5,
-4,
-5,
-4,
-5,
-4,
-5,
-4,
-5,
-4,
-5,
-4,
-5,
-4,
-5,
-4,
-5,
-3,
-4,
-5,
-4,
-5,
-4,
-4,
-5,
-4,
-5,
-4,
-4,
-5,
-4,
-4,
-5,
-4,
-4,
-4,
-4,
-5,
-4,
-4,
-4,
-4,
-4,
-5,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-3,
-4,
-4,
-4,
-4,
-4,
-3,
-4,
-4,
-4,
-3,
-4,
-4,
-3,
-4,
-3,
-4,
-3,
-3,
-4,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-2,
-3,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-1,
-2,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--2,
--1,
--2,
--1,
--2,
--2,
--2,
--1,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--3,
--2,
--3,
--2,
--3,
--2,
--3,
--2,
--3,
--2,
--3,
--3,
--3,
--2,
--3,
--3,
--3,
--3,
--2,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--4,
--3,
--3,
--3,
--3,
--4,
--3,
--3,
--3,
--4,
--3,
--3,
--4,
--3,
--3,
--4,
--3,
--3,
--4,
--3,
--4,
--3,
--4,
--3,
--4,
--3,
--4,
--3,
--4,
--3,
--4,
--3,
--4,
--3,
--4,
--4,
--3,
--4,
--3,
--4,
--4,
--3,
--4,
--3,
--4,
--4,
--3,
--4,
--3,
--4,
--4,
--3,
--4,
--3,
--4,
--3,
--4,
--4,
--3,
--3,
--3,
--4,
--3,
--4,
--4,
--3,
--4,
--3,
--4,
--3,
--4,
--3,
--3,
--4,
--3,
--4,
--3,
--4,
--3,
--3,
--4,
--3,
--3,
--4,
--3,
--3,
--4,
--3,
--3,
--3,
--3,
--4,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--2,
--3,
--3,
--3,
--2,
--3,
--3,
--2,
--3,
--2,
--3,
--2,
--3,
--2,
--3,
--2,
--3,
--2,
--2,
--3,
--2,
--2,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--2,
--2,
--2,
--1,
--2,
--2,
--2,
--2,
--1,
--2,
--2,
--1,
--2,
--1,
--2,
--1,
--2,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--1,
--1,
--1,
--2,
--1,
--1,
-0,
--1,
--1,
--1,
--1,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-2,
-1,
-1,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-2,
-1,
-2,
-2,
-2,
-1,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-3,
-2,
-2,
-2,
-3,
-2,
-2,
-3,
-2,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-3,
-2,
-3,
-2,
-3,
-3,
-2,
-3,
-3,
-3,
-2,
-3,
-3,
-2,
-3,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-3,
-3,
-3,
-2,
-2,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-2,
-3,
-3,
-2,
-3,
-3,
-2,
-3,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-2,
-3,
-2,
-2,
-3,
-2,
-2,
-3,
-2,
-2,
-2,
-2,
-2,
-3,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-1,
-2,
-2,
-2,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-1,
-1,
-2,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--2,
--1,
--1,
--1,
--1,
--2,
--1,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--2,
--1,
--2,
--1,
--2,
--1,
--2,
--1,
--2,
--1,
--2,
--2,
--1,
--2,
--2,
--1,
--2,
--2,
--2,
--1,
--2,
--2,
--2,
--2,
--1,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--3,
--2,
--2,
--3,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--3,
--1,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--1,
--2,
--2,
--2,
--2,
--2,
--2,
--1,
--2,
--2,
--2,
--2,
--1,
--2,
--2,
--2,
--1,
--2,
--2,
--1,
--2,
--1,
--2,
--2,
--1,
--2,
--1,
--2,
--1,
--2,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--1,
--1,
--2,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-2,
-1,
-1,
-1,
-1,
-1,
-1,
-2,
-1,
-1,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-2,
-1,
-2,
-1,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-2,
-2,
-1,
-2,
-2,
-2,
-1,
-2,
-2,
-2,
-1,
-2,
-2,
-2,
-2,
-1,
-2,
-2,
-2,
-1,
-2,
-2,
-2,
-1,
-2,
-2,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-2,
-1,
-2,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-1,
-2,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-1,
-2,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-1,
-2,
-1,
-1,
-1,
-1,
-1,
-2,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-1,
-0,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--2,
--1,
--1,
--1,
--1,
--1,
--1,
--2,
--1,
--1,
--1,
--1,
--2,
--1,
--1,
--1,
--2,
--1,
--1,
--1,
--2,
--1,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--1,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--1,
--1,
--2,
--1,
--1,
--1,
--2,
--1,
--1,
--1,
--1,
--1,
--2,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--2,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-2,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-1,
-0,
-1,
-1,
-0,
-1,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
-0,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0};
Index: pjproject/branches/split-3rd-party/pjmedia/src/pjmedia/mp3_writer.c
===================================================================
--- pjproject/branches/split-3rd-party/pjmedia/src/pjmedia/mp3_writer.c	(revision 1174)
+++ 	(revision )
@@ -1,563 +1,0 @@
-/* $Id$ */
-/* 
- * Copyright (C) 2003-2007 Benny Prijono <benny@prijono.org>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
- */
-
-/*
- * Contributed by:
- *  Toni < buldozer at aufbix dot org >
- */
-#include <pjmedia/mp3_port.h>
-#include <pjmedia/errno.h>
-#include <pj/assert.h>
-#include <pj/file_access.h>
-#include <pj/file_io.h>
-#include <pj/log.h>
-#include <pj/pool.h>
-#include <pj/string.h>
-#include <pj/unicode.h>
-
-
-/* Include BladeDLL declarations */
-#include "BladeMP3EncDLL.h"
-
-
-#define THIS_FILE	    "mp3_writer.c"
-#define SIGNATURE	    PJMEDIA_PORT_SIGNATURE('F', 'W', 'M', '3')
-#define BYTES_PER_SAMPLE    2
-
-static struct BladeDLL
-{
-    void		*hModule;
-    int			 refCount;
-    BEINITSTREAM	 beInitStream;
-    BEENCODECHUNK	 beEncodeChunk;
-    BEDEINITSTREAM	 beDeinitStream;
-    BECLOSESTREAM	 beCloseStream;
-    BEVERSION		 beVersion;
-    BEWRITEVBRHEADER	 beWriteVBRHeader;
-    BEWRITEINFOTAG	 beWriteInfoTag;
-} BladeDLL;
-
-
-struct mp3_file_port
-{
-    pjmedia_port    base;
-    pj_size_t	    total;
-    pj_oshandle_t   fd;
-    pj_size_t	    cb_size;
-    pj_status_t	   (*cb)(pjmedia_port*, void*);
-
-    unsigned	    silence_duration;
-
-    pj_str_t			mp3_filename;
-    pjmedia_mp3_encoder_option  mp3_option;
-    unsigned		        mp3_samples_per_frame;
-    pj_int16_t		       *mp3_sample_buf;
-    unsigned			mp3_sample_pos;
-    HBE_STREAM		        mp3_stream;
-    unsigned char	       *mp3_buf;
-};
-
-
-static pj_status_t file_put_frame(pjmedia_port *this_port, 
-				  const pjmedia_frame *frame);
-static pj_status_t file_get_frame(pjmedia_port *this_port, 
-				  pjmedia_frame *frame);
-static pj_status_t file_on_destroy(pjmedia_port *this_port);
-
-
-#if defined(PJ_WIN32) || defined(_WIN32) || defined(WIN32)
-
-#include <windows.h>
-#define DLL_NAME    PJ_T("LAME_ENC.DLL")
-
-/*
- * Load BladeEncoder DLL.
- */
-static pj_status_t init_blade_dll(void)
-{
-    if (BladeDLL.refCount == 0) {
-	#define GET_PROC(type, name)  \
-	    BladeDLL.name = (type)GetProcAddress(BladeDLL.hModule, PJ_T(#name)); \
-	    if (BladeDLL.name == NULL) { \
-		PJ_LOG(1,(THIS_FILE, "Unable to find %s in %s", #name, DLL_NAME)); \
-		return PJ_RETURN_OS_ERROR(GetLastError()); \
-	    }
-
-	BE_VERSION beVersion;
-	BladeDLL.hModule = (void*)LoadLibrary(DLL_NAME);
-	if (BladeDLL.hModule == NULL) {
-	    pj_status_t status = PJ_RETURN_OS_ERROR(GetLastError());
-	    char errmsg[PJ_ERR_MSG_SIZE];
-
-	    pj_strerror(status, errmsg, sizeof(errmsg));
-	    PJ_LOG(1,(THIS_FILE, "Unable to load %s: %s", DLL_NAME, errmsg));
-	    return status;
-	}
-
-	GET_PROC(BEINITSTREAM, beInitStream);
-	GET_PROC(BEENCODECHUNK, beEncodeChunk);
-	GET_PROC(BEDEINITSTREAM, beDeinitStream);
-	GET_PROC(BECLOSESTREAM, beCloseStream);
-	GET_PROC(BEVERSION, beVersion);
-	GET_PROC(BEWRITEVBRHEADER, beWriteVBRHeader);
-	GET_PROC(BEWRITEINFOTAG, beWriteInfoTag);
-
-	#undef GET_PROC
-
-	BladeDLL.beVersion(&beVersion);
-	PJ_LOG(4,(THIS_FILE, "%s encoder v%d.%d loaded (%s)", DLL_NAME,
-		  beVersion.byMajorVersion, beVersion.byMinorVersion,
-		  beVersion.zHomepage));
-    }
-    ++BladeDLL.refCount;
-    return PJ_SUCCESS;
-}
-
-/*
- * Decrement the reference counter of the DLL.
- */
-static void deinit_blade_dll()
-{
-    --BladeDLL.refCount;
-    if (BladeDLL.refCount == 0 && BladeDLL.hModule) {
-	FreeLibrary(BladeDLL.hModule);
-	BladeDLL.hModule = NULL;
-	PJ_LOG(4,(THIS_FILE, "%s unloaded", DLL_NAME));
-    }
-}
-
-#else
-
-static pj_status_t init_blade_dll(void)
-{
-    PJ_LOG(1,(THIS_FILE, "Error: MP3 writer port only works on Windows for now"));
-    return PJ_ENOTSUP;
-}
-
-static void deinit_blade_dll()
-{
-}
-#endif
-
-
-
-/*
- * Initialize MP3 encoder.
- */
-static pj_status_t init_mp3_encoder(struct mp3_file_port *fport,
-				    pj_pool_t *pool)
-{
-    BE_CONFIG LConfig;
-    unsigned  long InSamples;
-    unsigned  long OutBuffSize;
-    long MP3Err;
-
-    /*
-     * Initialize encoder configuration.
-     */
-    pj_bzero(&LConfig, sizeof(BE_CONFIG));
-    LConfig.dwConfig = BE_CONFIG_LAME;
-    LConfig.format.LHV1.dwStructVersion = 1;
-    LConfig.format.LHV1.dwStructSize = sizeof(BE_CONFIG);
-    LConfig.format.LHV1.dwSampleRate = fport->base.info.clock_rate;
-    LConfig.format.LHV1.dwReSampleRate = 0;
-
-    if (fport->base.info.channel_count==1)
-	LConfig.format.LHV1.nMode = BE_MP3_MODE_MONO;
-    else if (fport->base.info.channel_count==2)
-	LConfig.format.LHV1.nMode = BE_MP3_MODE_STEREO;
-    else
-	return PJMEDIA_ENCCHANNEL;
-
-    LConfig.format.LHV1.dwBitrate = fport->mp3_option.bit_rate / 1000;
-    LConfig.format.LHV1.nPreset = LQP_NOPRESET;
-    LConfig.format.LHV1.bCopyright = 0;
-    LConfig.format.LHV1.bCRC = 1;
-    LConfig.format.LHV1.bOriginal = 1;
-    LConfig.format.LHV1.bPrivate = 0;
-
-    if (!fport->mp3_option.vbr) {
-	LConfig.format.LHV1.nVbrMethod = VBR_METHOD_NONE;
-	LConfig.format.LHV1.bWriteVBRHeader = 0;
-	LConfig.format.LHV1.bEnableVBR = 0;
-    } else {
-	LConfig.format.LHV1.nVbrMethod = VBR_METHOD_DEFAULT;
-	LConfig.format.LHV1.bWriteVBRHeader = 1;
-	LConfig.format.LHV1.dwVbrAbr_bps = fport->mp3_option.bit_rate;
-	LConfig.format.LHV1.nVBRQuality =  (pj_uint16_t)
-					   fport->mp3_option.quality;
-	LConfig.format.LHV1.bEnableVBR = 1;
-    }
-
-    LConfig.format.LHV1.nQuality = (pj_uint16_t) 
-				   (((0-fport->mp3_option.quality-1)<<8) | 
-				    fport->mp3_option.quality);
-
-    /*
-     * Init MP3 stream.
-     */
-    InSamples = 0;
-    MP3Err = BladeDLL.beInitStream(&LConfig, &InSamples, &OutBuffSize,
-				   &fport->mp3_stream);
-    if (MP3Err != BE_ERR_SUCCESSFUL) 
-	return PJMEDIA_ERROR;
-
-    /*
-     * Allocate sample buffer.
-     */
-    fport->mp3_samples_per_frame = (unsigned)InSamples;
-    fport->mp3_sample_buf = pj_pool_alloc(pool, fport->mp3_samples_per_frame * 2);
-    if (!fport->mp3_sample_buf)
-	return PJ_ENOMEM;
-
-    /*
-     * Allocate encoded MP3 buffer.
-     */
-    fport->mp3_buf = pj_pool_alloc(pool, (pj_size_t)OutBuffSize);
-    if (fport->mp3_buf == NULL)
-	return PJ_ENOMEM;
-
-    
-    return PJ_SUCCESS;
-}
-
-
-/*
- * Create MP3 file writer port.
- */
-PJ_DEF(pj_status_t) 
-pjmedia_mp3_writer_port_create( pj_pool_t *pool,
-				const char *filename,
-				unsigned sampling_rate,
-				unsigned channel_count,
-				unsigned samples_per_frame,
-				unsigned bits_per_sample,
-				const pjmedia_mp3_encoder_option *param_option,
-				pjmedia_port **p_port )
-{
-    struct mp3_file_port *fport;
-    pj_status_t status;
-
-    status = init_blade_dll();
-    if (status != PJ_SUCCESS)
-	return status;
-
-    /* Check arguments. */
-    PJ_ASSERT_RETURN(pool && filename && p_port, PJ_EINVAL);
-
-    /* Only supports 16bits per sample for now. */
-    PJ_ASSERT_RETURN(bits_per_sample == 16, PJ_EINVAL);
-
-    /* Create file port instance. */
-    fport = pj_pool_zalloc(pool, sizeof(struct mp3_file_port));
-    PJ_ASSERT_RETURN(fport != NULL, PJ_ENOMEM);
-
-    /* Initialize port info. */
-    pj_strdup2_with_null(pool, &fport->mp3_filename, filename);
-    pjmedia_port_info_init(&fport->base.info, &fport->mp3_filename, SIGNATURE,
-			   sampling_rate, channel_count, bits_per_sample,
-			   samples_per_frame);
-
-    fport->base.get_frame = &file_get_frame;
-    fport->base.put_frame = &file_put_frame;
-    fport->base.on_destroy = &file_on_destroy;
-
-
-    /* Open file in write and read mode.
-     * We need the read mode because we'll modify the WAVE header once
-     * the recording has completed.
-     */
-    status = pj_file_open(pool, filename, PJ_O_WRONLY, &fport->fd);
-    if (status != PJ_SUCCESS) {
-	deinit_blade_dll();
-	return status;
-    }
-
-    /* Copy and initialize option with default settings */
-    if (param_option) {
-	pj_memcpy(&fport->mp3_option, param_option, 
-		   sizeof(pjmedia_mp3_encoder_option));
-    } else {
-	pj_bzero(&fport->mp3_option, sizeof(pjmedia_mp3_encoder_option));
-	fport->mp3_option.vbr = PJ_TRUE;
-    }
-
-    /* Calculate bitrate if it's not specified, only if it's not VBR. */
-    if (fport->mp3_option.bit_rate == 0 && !fport->mp3_option.vbr) 
-	fport->mp3_option.bit_rate = sampling_rate * channel_count;
-
-    /* Set default quality if it's not specified */
-    if (fport->mp3_option.quality == 0) 
-	fport->mp3_option.quality = 2;
-
-    /* Init mp3 encoder */
-    status = init_mp3_encoder(fport, pool);
-    if (status != PJ_SUCCESS) {
-	pj_file_close(fport->fd);
-	deinit_blade_dll();
-	return status;
-    }
-
-    /* Done. */
-    *p_port = &fport->base;
-
-    PJ_LOG(4,(THIS_FILE, 
-	      "MP3 file writer '%.*s' created: samp.rate=%dKHz, "
-	      "bitrate=%dkbps%s, quality=%d",
-	      (int)fport->base.info.name.slen,
-	      fport->base.info.name.ptr,
-	      fport->base.info.clock_rate/1000,
-	      fport->mp3_option.bit_rate/1000,
-	      (fport->mp3_option.vbr ? " (VBR)" : ""),
-	      fport->mp3_option.quality));
-
-    return PJ_SUCCESS;
-}
-
-
-
-/*
- * Register callback.
- */
-PJ_DEF(pj_status_t) 
-pjmedia_mp3_writer_port_set_cb( pjmedia_port *port,
-				pj_size_t pos,
-				void *user_data,
-			        pj_status_t (*cb)(pjmedia_port *port,
-						  void *usr_data))
-{
-    struct mp3_file_port *fport;
-
-    /* Sanity check */
-    PJ_ASSERT_RETURN(port && cb, PJ_EINVAL);
-
-    /* Check that this is really a writer port */
-    PJ_ASSERT_RETURN(port->info.signature == SIGNATURE, PJ_EINVALIDOP);
-
-    fport = (struct mp3_file_port*) port;
-
-    fport->cb_size = pos;
-    fport->base.port_data.pdata = user_data;
-    fport->cb = cb;
-
-    return PJ_SUCCESS;
-
-}
-
-
-/*
- * Put a frame into the buffer. When the buffer is full, flush the buffer
- * to the file.
- */
-static pj_status_t file_put_frame(pjmedia_port *this_port, 
-				  const pjmedia_frame *frame)
-{
-    struct mp3_file_port *fport = (struct mp3_file_port *)this_port;
-    unsigned long MP3Err;
-    pj_ssize_t	bytes;
-    pj_status_t status;
-    unsigned long WriteSize;
-
-    /* Record silence if input is no-frame */
-    if (frame->type == PJMEDIA_FRAME_TYPE_NONE || frame->size == 0) {
-	unsigned samples_left = fport->base.info.samples_per_frame;
-	unsigned samples_copied = 0;
-
-	/* Only want to record at most 1 second of silence */
-	if (fport->silence_duration >= fport->base.info.clock_rate)
-	    return PJ_SUCCESS;
-
-	while (samples_left) {
-	    unsigned samples_needed = fport->mp3_samples_per_frame -
-				      fport->mp3_sample_pos;
-	    if (samples_needed > samples_left)
-		samples_needed = samples_left;
-
-	    pjmedia_zero_samples(fport->mp3_sample_buf + fport->mp3_sample_pos,
-				 samples_needed);
-	    fport->mp3_sample_pos += samples_needed;
-	    samples_left -= samples_needed;
-	    samples_copied += samples_needed;
-
-	    /* Encode if we have full frame */
-	    if (fport->mp3_sample_pos == fport->mp3_samples_per_frame) {
-		
-		/* Clear position */
-		fport->mp3_sample_pos = 0;
-
-		/* Encode ! */
-		MP3Err = BladeDLL.beEncodeChunk(fport->mp3_stream,
-						fport->mp3_samples_per_frame,
-						fport->mp3_sample_buf, 
-						fport->mp3_buf, 
-						&WriteSize);
-		if (MP3Err != BE_ERR_SUCCESSFUL)
-		    return PJMEDIA_ERROR;
-
-		/* Write the chunk */
-		bytes = WriteSize;
-		status = pj_file_write(fport->fd, fport->mp3_buf, &bytes);
-		if (status != PJ_SUCCESS)
-		    return status;
-
-		/* Increment total written. */
-		fport->total += bytes;
-	    }
-	}
-
-	fport->silence_duration += fport->base.info.samples_per_frame;
-
-    }
-    /* If encoder is expecting different sample size, then we need to
-     * buffer the samples.
-     */
-    else if (fport->mp3_samples_per_frame != 
-	     fport->base.info.samples_per_frame) 
-    {
-	unsigned samples_left = frame->size / 2;
-	unsigned samples_copied = 0;
-	const pj_int16_t *src_samples = frame->buf;
-
-	fport->silence_duration = 0;
-
-	while (samples_left) {
-	    unsigned samples_needed = fport->mp3_samples_per_frame -
-				      fport->mp3_sample_pos;
-	    if (samples_needed > samples_left)
-		samples_needed = samples_left;
-
-	    pjmedia_copy_samples(fport->mp3_sample_buf + fport->mp3_sample_pos,
-				 src_samples + samples_copied,
-				 samples_needed);
-	    fport->mp3_sample_pos += samples_needed;
-	    samples_left -= samples_needed;
-	    samples_copied += samples_needed;
-
-	    /* Encode if we have full frame */
-	    if (fport->mp3_sample_pos == fport->mp3_samples_per_frame) {
-		
-		/* Clear position */
-		fport->mp3_sample_pos = 0;
-
-		/* Encode ! */
-		MP3Err = BladeDLL.beEncodeChunk(fport->mp3_stream,
-						fport->mp3_samples_per_frame,
-						fport->mp3_sample_buf, 
-						fport->mp3_buf, 
-						&WriteSize);
-		if (MP3Err != BE_ERR_SUCCESSFUL)
-		    return PJMEDIA_ERROR;
-
-		/* Write the chunk */
-		bytes = WriteSize;
-		status = pj_file_write(fport->fd, fport->mp3_buf, &bytes);
-		if (status != PJ_SUCCESS)
-		    return status;
-
-		/* Increment total written. */
-		fport->total += bytes;
-	    }
-	}
-
-    } else {
-
-	fport->silence_duration = 0;
-
-	/* Encode ! */
-	MP3Err = BladeDLL.beEncodeChunk(fport->mp3_stream,
-					fport->mp3_samples_per_frame,
-					frame->buf, 
-					fport->mp3_buf, 
-					&WriteSize);
-	if (MP3Err != BE_ERR_SUCCESSFUL)
-	    return PJMEDIA_ERROR;
-
-	/* Write the chunk */
-	bytes = WriteSize;
-	status = pj_file_write(fport->fd, fport->mp3_buf, &bytes);
-	if (status != PJ_SUCCESS)
-	    return status;
-
-	/* Increment total written. */
-	fport->total += bytes;
-    }
-
-    /* Increment total written, and check if we need to call callback */
-    
-    if (fport->cb && fport->total >= fport->cb_size) {
-	pj_status_t (*cb)(pjmedia_port*, void*);
-	pj_status_t status;
-
-	cb = fport->cb;
-	fport->cb = NULL;
-
-	status = (*cb)(this_port, this_port->port_data.pdata);
-	return status;
-    }
-
-    return PJ_SUCCESS;
-}
-
-/*
- * Get frame, basicy is a no-op operation.
- */
-static pj_status_t file_get_frame(pjmedia_port *this_port, 
-				  pjmedia_frame *frame)
-{
-    PJ_UNUSED_ARG(this_port);
-    PJ_UNUSED_ARG(frame);
-    return PJ_EINVALIDOP;
-}
-
-
-/*
- * Close the port, modify file header with updated file length.
- */
-static pj_status_t file_on_destroy(pjmedia_port *this_port)
-{
-    struct mp3_file_port *fport = (struct mp3_file_port*)this_port;
-    pj_status_t status;
-    unsigned long WriteSize;
-    unsigned long MP3Err;
-
-
-    /* Close encoder */
-    MP3Err = BladeDLL.beDeinitStream(fport->mp3_stream, fport->mp3_buf, 
-				     &WriteSize);
-    if (MP3Err == BE_ERR_SUCCESSFUL) {
-	pj_ssize_t bytes = WriteSize;
-	status = pj_file_write(fport->fd, fport->mp3_buf, &bytes);
-    }
-
-    /* Close file */
-    status = pj_file_close(fport->fd);
-
-    /* Write additional VBR header */
-    if (fport->mp3_option.vbr) {
-	MP3Err = BladeDLL.beWriteVBRHeader(fport->mp3_filename.ptr);
-    }
-
-
-    /* Decrement DLL reference counter */
-    deinit_blade_dll();
-
-    /* Done. */
-    return PJ_SUCCESS;
-}
-
Index: pjproject/branches/split-3rd-party/pjmedia/src/pjmedia/plc_steveu.h
===================================================================
--- pjproject/branches/split-3rd-party/pjmedia/src/pjmedia/plc_steveu.h	(revision 1174)
+++ 	(revision )
@@ -1,153 +1,0 @@
-/*! \file
- * \brief SpanDSP - a series of DSP components for telephony
- *
- * plc.h
- *
- * \author Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2004 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * This version may be optionally licenced under the GNU LGPL licence.
- *
- * A license has been granted to Digium (via disclaimer) for the use of
- * this code.
- */
-
-
-#if !defined(_PLC_H_)
-#define _PLC_H_
-
-
-/*! \page plc_page Packet loss concealment
-\section plc_page_sec_1 What does it do?
-The packet loss concealment module provides a suitable synthetic fill-in signal,
-to minimise the audible effect of lost packets in VoIP applications. It is not
-tied to any particular codec, and could be used with almost any codec which does not
-specify its own procedure for packet loss concealment.
-
-Where a codec specific concealment procedure exists, the algorithm is usually built
-around knowledge of the characteristics of the particular codec. It will, therefore,
-generally give better results for that particular codec than this generic concealer will.
-
-\section plc_page_sec_2 How does it work?
-While good packets are being received, the plc_rx() routine keeps a record of the trailing
-section of the known speech signal. If a packet is missed, plc_fillin() is called to produce
-a synthetic replacement for the real speech signal. The average mean difference function
-(AMDF) is applied to the last known good signal, to determine its effective pitch.
-Based on this, the last pitch period of signal is saved. Essentially, this cycle of speech
-will be repeated over and over until the real speech resumes. However, several refinements
-are needed to obtain smooth pleasant sounding results.
-
-- The two ends of the stored cycle of speech will not always fit together smoothly. This can
-  cause roughness, or even clicks, at the joins between cycles. To soften this, the
-  1/4 pitch period of real speech preceeding the cycle to be repeated is blended with the last
-  1/4 pitch period of the cycle to be repeated, using an overlap-add (OLA) technique (i.e.
-  in total, the last 5/4 pitch periods of real speech are used).
-
-- The start of the synthetic speech will not always fit together smoothly with the tail of
-  real speech passed on before the erasure was identified. Ideally, we would like to modify
-  the last 1/4 pitch period of the real speech, to blend it into the synthetic speech. However,
-  it is too late for that. We could have delayed the real speech a little, but that would
-  require more buffer manipulation, and hurt the efficiency of the no-lost-packets case
-  (which we hope is the dominant case). Instead we use a degenerate form of OLA to modify
-  the start of the synthetic data. The last 1/4 pitch period of real speech is time reversed,
-  and OLA is used to blend it with the first 1/4 pitch period of synthetic speech. The result
-  seems quite acceptable.
-
-- As we progress into the erasure, the chances of the synthetic signal being anything like
-  correct steadily fall. Therefore, the volume of the synthesized signal is made to decay
-  linearly, such that after 50ms of missing audio it is reduced to silence.
-
-- When real speech resumes, an extra 1/4 pitch period of sythetic speech is blended with the
-  start of the real speech. If the erasure is small, this smoothes the transition. If the erasure
-  is long, and the synthetic signal has faded to zero, the blending softens the start up of the
-  real signal, avoiding a kind of "click" or "pop" effect that might occur with a sudden onset.
-
-\section plc_page_sec_3 How do I use it?
-Before audio is processed, call plc_init() to create an instance of the packet loss
-concealer. For each received audio packet that is acceptable (i.e. not including those being
-dropped for being too late) call plc_rx() to record the content of the packet. Note this may
-modify the packet a little after a period of packet loss, to blend real synthetic data smoothly.
-When a real packet is not available in time, call plc_fillin() to create a sythetic substitute.
-That's it!
-*/
-
-/*! Minimum allowed pitch (66 Hz) */
-#define PLC_PITCH_MIN           120
-/*! Maximum allowed pitch (200 Hz) */
-#define PLC_PITCH_MAX           40
-/*! Maximum pitch OLA window */
-#define PLC_PITCH_OVERLAP_MAX   (PLC_PITCH_MIN >> 2)
-/*! The length over which the AMDF function looks for similarity (20 ms) */
-#define CORRELATION_SPAN        160
-/*! History buffer length. The buffer much also be at leat 1.25 times
-    PLC_PITCH_MIN, but that is much smaller than the buffer needs to be for
-    the pitch assessment. */
-#define PLC_HISTORY_LEN         (CORRELATION_SPAN + PLC_PITCH_MIN)
-
-typedef struct
-{
-    /*! Consecutive erased samples */
-    int missing_samples;
-    /*! Current offset into pitch period */
-    int pitch_offset;
-    /*! Pitch estimate */
-    int pitch;
-    /*! Buffer for a cycle of speech */
-    float pitchbuf[PLC_PITCH_MIN];
-    /*! History buffer */
-    pj_int16_t history[PLC_HISTORY_LEN];
-    /*! Current pointer into the history buffer */
-    int buf_ptr;
-} plc_state_t;
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*! Process a block of received audio samples.
-    \brief Process a block of received audio samples.
-    \param s The packet loss concealer context.
-    \param amp The audio sample buffer.
-    \param len The number of samples in the buffer.
-    \return The number of samples in the buffer. */
-int plc_rx(plc_state_t *s, pj_int16_t amp[], int len);
-
-/*! Fill-in a block of missing audio samples.
-    \brief Fill-in a block of missing audio samples.
-    \param s The packet loss concealer context.
-    \param amp The audio sample buffer.
-    \param len The number of samples to be synthesised.
-    \return The number of samples synthesized. */
-int plc_fillin(plc_state_t *s, pj_int16_t amp[], int len);
-
-/*! Process a block of received V.29 modem audio samples.
-    \brief Process a block of received V.29 modem audio samples.
-    \param s The packet loss concealer context.
-    \return A pointer to the he packet loss concealer context. */
-plc_state_t *plc_init(plc_state_t *s);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-/*- End of file ------------------------------------------------------------*/
-
Index: pjproject/branches/split-3rd-party/pjmedia/src/pjmedia/smallfilter.h
===================================================================
--- pjproject/branches/split-3rd-party/pjmedia/src/pjmedia/smallfilter.h	(revision 1174)
+++ 	(revision )
@@ -1,4617 +1,0 @@
-/* Included by resamplesubs.c */
-#define SMALL_FILTER_NMULT ((RES_HWORD)13)
-#define SMALL_FILTER_SCALE 13128 /* Unity-gain scale factor */
-#define SMALL_FILTER_NWING 1536 /* Filter table length */
-static const RES_HWORD SMALL_FILTER_IMP[] /* Impulse response */ = {
-32767,
-32766,
-32764,
-32760,
-32755,
-32749,
-32741,
-32731,
-32721,
-32708,
-32695,
-32679,
-32663,
-32645,
-32625,
-32604,
-32582,
-32558,
-32533,
-32506,
-32478,
-32448,
-32417,
-32385,
-32351,
-32316,
-32279,
-32241,
-32202,
-32161,
-32119,
-32075,
-32030,
-31984,
-31936,
-31887,
-31836,
-31784,
-31731,
-31676,
-31620,
-31563,
-31504,
-31444,
-31383,
-31320,
-31256,
-31191,
-31124,
-31056,
-30987,
-30916,
-30845,
-30771,
-30697,
-30621,
-30544,
-30466,
-30387,
-30306,
-30224,
-30141,
-30057,
-29971,
-29884,
-29796,
-29707,
-29617,
-29525,
-29433,
-29339,
-29244,
-29148,
-29050,
-28952,
-28852,
-28752,
-28650,
-28547,
-28443,
-28338,
-28232,
-28125,
-28017,
-27908,
-27797,
-27686,
-27574,
-27461,
-27346,
-27231,
-27115,
-26998,
-26879,
-26760,
-26640,
-26519,
-26398,
-26275,
-26151,
-26027,
-25901,
-25775,
-25648,
-25520,
-25391,
-25262,
-25131,
-25000,
-24868,
-24735,
-24602,
-24467,
-24332,
-24197,
-24060,
-23923,
-23785,
-23647,
-23507,
-23368,
-23227,
-23086,
-22944,
-22802,
-22659,
-22515,
-22371,
-22226,
-22081,
-21935,
-21789,
-21642,
-21494,
-21346,
-21198,
-21049,
-20900,
-20750,
-20600,
-20449,
-20298,
-20146,
-19995,
-19842,
-19690,
-19537,
-19383,
-19230,
-19076,
-18922,
-18767,
-18612,
-18457,
-18302,
-18146,
-17990,
-17834,
-17678,
-17521,
-17365,
-17208,
-17051,
-16894,
-16737,
-16579,
-16422,
-16264,
-16106,
-15949,
-15791,
-15633,
-15475,
-15317,
-15159,
-15001,
-14843,
-14685,
-14527,
-14369,
-14212,
-14054,
-13896,
-13739,
-13581,
-13424,
-13266,
-13109,
-12952,
-12795,
-12639,
-12482,
-12326,
-12170,
-12014,
-11858,
-11703,
-11548,
-11393,
-11238,
-11084,
-10929,
-10776,
-10622,
-10469,
-10316,
-10164,
-10011,
-9860,
-9708,
-9557,
-9407,
-9256,
-9106,
-8957,
-8808,
-8659,
-8511,
-8364,
-8216,
-8070,
-7924,
-7778,
-7633,
-7488,
-7344,
-7200,
-7057,
-6914,
-6773,
-6631,
-6490,
-6350,
-6210,
-6071,
-5933,
-5795,
-5658,
-5521,
-5385,
-5250,
-5115,
-4981,
-4848,
-4716,
-4584,
-4452,
-4322,
-4192,
-4063,
-3935,
-3807,
-3680,
-3554,
-3429,
-3304,
-3180,
-3057,
-2935,
-2813,
-2692,
-2572,
-2453,
-2335,
-2217,
-2101,
-1985,
-1870,
-1755,
-1642,
-1529,
-1418,
-1307,
-1197,
-1088,
-979,
-872,
-765,
-660,
-555,
-451,
-348,
-246,
-145,
-44,
--54,
--153,
--250,
--347,
--443,
--537,
--631,
--724,
--816,
--908,
--998,
--1087,
--1175,
--1263,
--1349,
--1435,
--1519,
--1603,
--1685,
--1767,
--1848,
--1928,
--2006,
--2084,
--2161,
--2237,
--2312,
--2386,
--2459,
--2531,
--2603,
--2673,
--2742,
--2810,
--2878,
--2944,
--3009,
--3074,
--3137,
--3200,
--3261,
--3322,
--3381,
--3440,
--3498,
--3554,
--3610,
--3665,
--3719,
--3772,
--3824,
--3875,
--3925,
--3974,
--4022,
--4069,
--4116,
--4161,
--4205,
--4249,
--4291,
--4333,
--4374,
--4413,
--4452,
--4490,
--4527,
--4563,
--4599,
--4633,
--4666,
--4699,
--4730,
--4761,
--4791,
--4820,
--4848,
--4875,
--4901,
--4926,
--4951,
--4974,
--4997,
--5019,
--5040,
--5060,
--5080,
--5098,
--5116,
--5133,
--5149,
--5164,
--5178,
--5192,
--5205,
--5217,
--5228,
--5238,
--5248,
--5257,
--5265,
--5272,
--5278,
--5284,
--5289,
--5293,
--5297,
--5299,
--5301,
--5303,
--5303,
--5303,
--5302,
--5300,
--5298,
--5295,
--5291,
--5287,
--5282,
--5276,
--5270,
--5263,
--5255,
--5246,
--5237,
--5228,
--5217,
--5206,
--5195,
--5183,
--5170,
--5157,
--5143,
--5128,
--5113,
--5097,
--5081,
--5064,
--5047,
--5029,
--5010,
--4991,
--4972,
--4952,
--4931,
--4910,
--4889,
--4867,
--4844,
--4821,
--4797,
--4774,
--4749,
--4724,
--4699,
--4673,
--4647,
--4620,
--4593,
--4566,
--4538,
--4510,
--4481,
--4452,
--4422,
--4393,
--4363,
--4332,
--4301,
--4270,
--4238,
--4206,
--4174,
--4142,
--4109,
--4076,
--4042,
--4009,
--3975,
--3940,
--3906,
--3871,
--3836,
--3801,
--3765,
--3729,
--3693,
--3657,
--3620,
--3584,
--3547,
--3510,
--3472,
--3435,
--3397,
--3360,
--3322,
--3283,
--3245,
--3207,
--3168,
--3129,
--3091,
--3052,
--3013,
--2973,
--2934,
--2895,
--2855,
--2816,
--2776,
--2736,
--2697,
--2657,
--2617,
--2577,
--2537,
--2497,
--2457,
--2417,
--2377,
--2337,
--2297,
--2256,
--2216,
--2176,
--2136,
--2096,
--2056,
--2016,
--1976,
--1936,
--1896,
--1856,
--1817,
--1777,
--1737,
--1698,
--1658,
--1619,
--1579,
--1540,
--1501,
--1462,
--1423,
--1384,
--1345,
--1306,
--1268,
--1230,
--1191,
--1153,
--1115,
--1077,
--1040,
--1002,
--965,
--927,
--890,
--854,
--817,
--780,
--744,
--708,
--672,
--636,
--600,
--565,
--530,
--494,
--460,
--425,
--391,
--356,
--322,
--289,
--255,
--222,
--189,
--156,
--123,
--91,
--59,
--27,
-4,
-35,
-66,
-97,
-127,
-158,
-188,
-218,
-247,
-277,
-306,
-334,
-363,
-391,
-419,
-447,
-474,
-501,
-528,
-554,
-581,
-606,
-632,
-657,
-683,
-707,
-732,
-756,
-780,
-803,
-827,
-850,
-872,
-895,
-917,
-939,
-960,
-981,
-1002,
-1023,
-1043,
-1063,
-1082,
-1102,
-1121,
-1139,
-1158,
-1176,
-1194,
-1211,
-1228,
-1245,
-1262,
-1278,
-1294,
-1309,
-1325,
-1340,
-1354,
-1369,
-1383,
-1397,
-1410,
-1423,
-1436,
-1448,
-1461,
-1473,
-1484,
-1496,
-1507,
-1517,
-1528,
-1538,
-1548,
-1557,
-1566,
-1575,
-1584,
-1592,
-1600,
-1608,
-1616,
-1623,
-1630,
-1636,
-1643,
-1649,
-1654,
-1660,
-1665,
-1670,
-1675,
-1679,
-1683,
-1687,
-1690,
-1694,
-1697,
-1700,
-1702,
-1704,
-1706,
-1708,
-1709,
-1711,
-1712,
-1712,
-1713,
-1713,
-1713,
-1713,
-1712,
-1711,
-1710,
-1709,
-1708,
-1706,
-1704,
-1702,
-1700,
-1697,
-1694,
-1691,
-1688,
-1685,
-1681,
-1677,
-1673,
-1669,
-1664,
-1660,
-1655,
-1650,
-1644,
-1639,
-1633,
-1627,
-1621,
-1615,
-1609,
-1602,
-1596,
-1589,
-1582,
-1575,
-1567,
-1560,
-1552,
-1544,
-1536,
-1528,
-1520,
-1511,
-1503,
-1494,
-1485,
-1476,
-1467,
-1458,
-1448,
-1439,
-1429,
-1419,
-1409,
-1399,
-1389,
-1379,
-1368,
-1358,
-1347,
-1337,
-1326,
-1315,
-1304,
-1293,
-1282,
-1271,
-1260,
-1248,
-1237,
-1225,
-1213,
-1202,
-1190,
-1178,
-1166,
-1154,
-1142,
-1130,
-1118,
-1106,
-1094,
-1081,
-1069,
-1057,
-1044,
-1032,
-1019,
-1007,
-994,
-981,
-969,
-956,
-943,
-931,
-918,
-905,
-892,
-879,
-867,
-854,
-841,
-828,
-815,
-802,
-790,
-777,
-764,
-751,
-738,
-725,
-713,
-700,
-687,
-674,
-662,
-649,
-636,
-623,
-611,
-598,
-585,
-573,
-560,
-548,
-535,
-523,
-510,
-498,
-486,
-473,
-461,
-449,
-437,
-425,
-413,
-401,
-389,
-377,
-365,
-353,
-341,
-330,
-318,
-307,
-295,
-284,
-272,
-261,
-250,
-239,
-228,
-217,
-206,
-195,
-184,
-173,
-163,
-152,
-141,
-131,
-121,
-110,
-100,
-90,
-80,
-70,
-60,
-51,
-41,
-31,
-22,
-12,
-3,
--5,
--14,
--23,
--32,
--41,
--50,
--59,
--67,
--76,
--84,
--93,
--101,
--109,
--117,
--125,
--133,
--140,
--148,
--156,
--163,
--170,
--178,
--185,
--192,
--199,
--206,
--212,
--219,
--226,
--232,
--239,
--245,
--251,
--257,
--263,
--269,
--275,
--280,
--286,
--291,
--297,
--302,
--307,
--312,
--317,
--322,
--327,
--332,
--336,
--341,
--345,
--349,
--354,
--358,
--362,
--366,
--369,
--373,
--377,
--380,
--384,
--387,
--390,
--394,
--397,
--400,
--402,
--405,
--408,
--411,
--413,
--416,
--418,
--420,
--422,
--424,
--426,
--428,
--430,
--432,
--433,
--435,
--436,
--438,
--439,
--440,
--442,
--443,
--444,
--445,
--445,
--446,
--447,
--447,
--448,
--448,
--449,
--449,
--449,
--449,
--449,
--449,
--449,
--449,
--449,
--449,
--449,
--448,
--448,
--447,
--447,
--446,
--445,
--444,
--443,
--443,
--442,
--441,
--440,
--438,
--437,
--436,
--435,
--433,
--432,
--430,
--429,
--427,
--426,
--424,
--422,
--420,
--419,
--417,
--415,
--413,
--411,
--409,
--407,
--405,
--403,
--400,
--398,
--396,
--393,
--391,
--389,
--386,
--384,
--381,
--379,
--376,
--374,
--371,
--368,
--366,
--363,
--360,
--357,
--355,
--352,
--349,
--346,
--343,
--340,
--337,
--334,
--331,
--328,
--325,
--322,
--319,
--316,
--313,
--310,
--307,
--304,
--301,
--298,
--294,
--291,
--288,
--285,
--282,
--278,
--275,
--272,
--269,
--265,
--262,
--259,
--256,
--252,
--249,
--246,
--243,
--239,
--236,
--233,
--230,
--226,
--223,
--220,
--217,
--213,
--210,
--207,
--204,
--200,
--197,
--194,
--191,
--187,
--184,
--181,
--178,
--175,
--172,
--168,
--165,
--162,
--159,
--156,
--153,
--150,
--147,
--143,
--140,
--137,
--134,
--131,
--128,
--125,
--122,
--120,
--117,
--114,
--111,
--108,
--105,
--102,
--99,
--97,
--94,
--91,
--88,
--86,
--83,
--80,
--78,
--75,
--72,
--70,
--67,
--65,
--62,
--59,
--57,
--55,
--52,
--50,
--47,
--45,
--43,
--40,
--38,
--36,
--33,
--31,
--29,
--27,
--25,
--22,
--20,
--18,
--16,
--14,
--12,
--10,
--8,
--6,
--4,
--2,
-0,
-0,
-2,
-4,
-6,
-8,
-9,
-11,
-13,
-14,
-16,
-17,
-19,
-21,
-22,
-24,
-25,
-27,
-28,
-29,
-31,
-32,
-33,
-35,
-36,
-37,
-38,
-40,
-41,
-42,
-43,
-44,
-45,
-46,
-47,
-48,
-49,
-50,
-51,
-52,
-53,
-54,
-55,
-56,
-56,
-57,
-58,
-59,
-59,
-60,
-61,
-62,
-62,
-63,
-63,
-64,
-64,
-65,
-66,
-66,
-66,
-67,
-67,
-68,
-68,
-69,
-69,
-69,
-70,
-70,
-70,
-70,
-71,
-71,
-71,
-71,
-71,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-71,
-71,
-71,
-71,
-71,
-70,
-70,
-70,
-70,
-69,
-69,
-69,
-69,
-68,
-68,
-68,
-67,
-67,
-67,
-66,
-66,
-66,
-65,
-65,
-64,
-64,
-64,
-63,
-63,
-62,
-62,
-62,
-61,
-61,
-60,
-60,
-59,
-59,
-58,
-58,
-58,
-57,
-57,
-56,
-56,
-55,
-55,
-54,
-54,
-53,
-53,
-52,
-52,
-51,
-51,
-50,
-50,
-49,
-48,
-48,
-47,
-47,
-46,
-46,
-45,
-45,
-44,
-44,
-43,
-43,
-42,
-42,
-41,
-41,
-40,
-39,
-39,
-38,
-38,
-37,
-37,
-36,
-36,
-35,
-35,
-34,
-34,
-33,
-33,
-32,
-32,
-31,
-31,
-30,
-30,
-29,
-29,
-28,
-28,
-27,
-27,
-26,
-26,
-25,
-25,
-24,
-24,
-23,
-23,
-23,
-22,
-22,
-21,
-21,
-20,
-20,
-20,
-19,
-19,
-18,
-18,
-17,
-17,
-17,
-16,
-16,
-15,
-15,
-15,
-14,
-14,
-14,
-13,
-13,
-12,
-12,
-12,
-11,
-11,
-11,
-10,
-10,
-10,
-9,
-9,
-9,
-9,
-8,
-8,
-8,
-7,
-7,
-7,
-7,
-6,
-6,
-6,
-6,
-5,
-5,
-5,
-5,
-4,
-4,
-4,
-4,
-3,
-3,
-3,
-3,
-3,
-2,
-2,
-2,
-2,
-2,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1
-};
-
-static const RES_HWORD SMALL_FILTER_IMPD[] = {
--1,
--2,
--4,
--5,
--6,
--8,
--10,
--10,
--13,
--13,
--16,
--16,
--18,
--20,
--21,
--22,
--24,
--25,
--27,
--28,
--30,
--31,
--32,
--34,
--35,
--37,
--38,
--39,
--41,
--42,
--44,
--45,
--46,
--48,
--49,
--51,
--52,
--53,
--55,
--56,
--57,
--59,
--60,
--61,
--63,
--64,
--65,
--67,
--68,
--69,
--71,
--71,
--74,
--74,
--76,
--77,
--78,
--79,
--81,
--82,
--83,
--84,
--86,
--87,
--88,
--89,
--90,
--92,
--92,
--94,
--95,
--96,
--98,
--98,
--100,
--100,
--102,
--103,
--104,
--105,
--106,
--107,
--108,
--109,
--111,
--111,
--112,
--113,
--115,
--115,
--116,
--117,
--119,
--119,
--120,
--121,
--121,
--123,
--124,
--124,
--126,
--126,
--127,
--128,
--129,
--129,
--131,
--131,
--132,
--133,
--133,
--135,
--135,
--135,
--137,
--137,
--138,
--138,
--140,
--139,
--141,
--141,
--142,
--142,
--143,
--144,
--144,
--145,
--145,
--146,
--146,
--147,
--148,
--148,
--148,
--149,
--149,
--150,
--150,
--151,
--151,
--152,
--151,
--153,
--152,
--153,
--154,
--153,
--154,
--154,
--155,
--155,
--155,
--155,
--156,
--156,
--156,
--156,
--157,
--156,
--157,
--157,
--157,
--157,
--158,
--157,
--158,
--158,
--157,
--158,
--158,
--158,
--158,
--158,
--158,
--158,
--158,
--158,
--158,
--157,
--158,
--158,
--157,
--158,
--157,
--158,
--157,
--157,
--157,
--156,
--157,
--156,
--156,
--156,
--156,
--155,
--155,
--155,
--155,
--154,
--155,
--153,
--154,
--153,
--153,
--152,
--153,
--151,
--152,
--151,
--150,
--151,
--150,
--149,
--149,
--149,
--148,
--147,
--148,
--146,
--146,
--146,
--145,
--145,
--144,
--144,
--143,
--143,
--141,
--142,
--141,
--140,
--140,
--139,
--138,
--138,
--137,
--137,
--136,
--135,
--135,
--134,
--133,
--132,
--132,
--132,
--130,
--130,
--129,
--128,
--128,
--127,
--126,
--125,
--125,
--124,
--123,
--122,
--122,
--121,
--120,
--119,
--118,
--118,
--116,
--116,
--115,
--115,
--113,
--113,
--111,
--111,
--110,
--109,
--109,
--107,
--107,
--105,
--105,
--104,
--103,
--102,
--101,
--101,
--98,
--99,
--97,
--97,
--96,
--94,
--94,
--93,
--92,
--92,
--90,
--89,
--88,
--88,
--86,
--86,
--84,
--84,
--82,
--82,
--81,
--80,
--78,
--78,
--77,
--76,
--75,
--74,
--73,
--72,
--72,
--70,
--69,
--68,
--68,
--66,
--65,
--65,
--63,
--63,
--61,
--61,
--59,
--59,
--58,
--56,
--56,
--55,
--54,
--53,
--52,
--51,
--50,
--49,
--48,
--47,
--47,
--45,
--44,
--44,
--42,
--42,
--41,
--39,
--39,
--38,
--37,
--36,
--36,
--34,
--33,
--33,
--31,
--31,
--30,
--29,
--28,
--27,
--26,
--25,
--25,
--23,
--23,
--22,
--21,
--20,
--20,
--18,
--18,
--17,
--16,
--15,
--14,
--14,
--13,
--12,
--11,
--10,
--10,
--9,
--8,
--7,
--6,
--6,
--5,
--4,
--4,
--2,
--2,
--2,
-0,
-0,
-1,
-2,
-2,
-3,
-4,
-4,
-5,
-6,
-6,
-7,
-8,
-9,
-9,
-9,
-11,
-11,
-11,
-12,
-13,
-13,
-14,
-15,
-15,
-16,
-16,
-17,
-17,
-18,
-19,
-19,
-19,
-20,
-21,
-21,
-21,
-22,
-23,
-23,
-24,
-23,
-25,
-25,
-25,
-26,
-26,
-27,
-27,
-27,
-28,
-28,
-29,
-29,
-30,
-29,
-30,
-31,
-31,
-31,
-32,
-32,
-32,
-32,
-33,
-33,
-34,
-33,
-34,
-35,
-34,
-35,
-35,
-35,
-36,
-36,
-36,
-36,
-37,
-36,
-37,
-37,
-38,
-37,
-38,
-37,
-38,
-39,
-38,
-38,
-39,
-39,
-38,
-39,
-39,
-40,
-39,
-39,
-40,
-39,
-40,
-40,
-39,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-41,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-39,
-40,
-40,
-39,
-40,
-39,
-40,
-39,
-39,
-39,
-39,
-39,
-39,
-39,
-38,
-38,
-39,
-38,
-38,
-38,
-37,
-38,
-37,
-38,
-37,
-36,
-37,
-37,
-36,
-36,
-36,
-36,
-36,
-35,
-35,
-36,
-34,
-35,
-34,
-35,
-34,
-33,
-34,
-33,
-33,
-33,
-33,
-32,
-32,
-32,
-31,
-31,
-31,
-31,
-30,
-31,
-30,
-30,
-29,
-30,
-29,
-28,
-29,
-28,
-28,
-28,
-27,
-27,
-27,
-26,
-27,
-25,
-26,
-25,
-26,
-24,
-25,
-24,
-24,
-23,
-24,
-23,
-22,
-23,
-22,
-22,
-21,
-21,
-21,
-21,
-20,
-20,
-19,
-20,
-19,
-18,
-19,
-18,
-18,
-17,
-17,
-17,
-17,
-16,
-16,
-15,
-16,
-15,
-14,
-15,
-14,
-14,
-13,
-13,
-13,
-12,
-13,
-12,
-11,
-12,
-11,
-10,
-11,
-10,
-10,
-9,
-9,
-9,
-9,
-8,
-8,
-8,
-8,
-7,
-7,
-6,
-7,
-6,
-5,
-6,
-5,
-5,
-5,
-4,
-4,
-4,
-3,
-4,
-3,
-3,
-2,
-2,
-2,
-2,
-1,
-2,
-1,
-0,
-1,
-0,
-0,
-0,
--1,
--1,
--1,
--1,
--1,
--2,
--2,
--2,
--2,
--3,
--3,
--3,
--3,
--3,
--4,
--4,
--4,
--4,
--5,
--4,
--5,
--5,
--6,
--5,
--6,
--6,
--6,
--6,
--6,
--7,
--6,
--7,
--7,
--7,
--8,
--7,
--8,
--8,
--8,
--8,
--8,
--9,
--8,
--9,
--9,
--9,
--9,
--9,
--10,
--9,
--10,
--10,
--10,
--10,
--10,
--10,
--11,
--10,
--11,
--10,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--12,
--11,
--12,
--12,
--11,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--13,
--12,
--12,
--13,
--12,
--13,
--12,
--13,
--13,
--12,
--13,
--13,
--12,
--13,
--13,
--13,
--13,
--12,
--13,
--13,
--13,
--13,
--13,
--12,
--13,
--13,
--13,
--13,
--13,
--12,
--13,
--13,
--13,
--12,
--13,
--13,
--13,
--12,
--13,
--13,
--12,
--13,
--12,
--13,
--12,
--13,
--12,
--12,
--13,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--11,
--12,
--11,
--12,
--11,
--12,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--10,
--11,
--11,
--10,
--10,
--11,
--10,
--10,
--10,
--10,
--10,
--9,
--10,
--10,
--9,
--10,
--9,
--8,
--9,
--9,
--9,
--9,
--9,
--9,
--8,
--9,
--8,
--9,
--8,
--8,
--8,
--8,
--8,
--7,
--8,
--8,
--7,
--7,
--8,
--7,
--7,
--7,
--7,
--6,
--7,
--7,
--6,
--7,
--6,
--6,
--6,
--6,
--6,
--6,
--5,
--6,
--5,
--6,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--4,
--5,
--4,
--4,
--5,
--4,
--4,
--4,
--3,
--4,
--4,
--3,
--4,
--3,
--3,
--4,
--3,
--3,
--2,
--3,
--3,
--3,
--2,
--3,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--1,
--2,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-2,
-1,
-1,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-2,
-2,
-1,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-3,
-2,
-2,
-3,
-2,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-3,
-2,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-2,
-3,
-3,
-2,
-3,
-3,
-2,
-3,
-2,
-3,
-3,
-2,
-2,
-3,
-2,
-3,
-2,
-2,
-3,
-2,
-2,
-3,
-2,
-2,
-2,
-2,
-3,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-0,
-2,
-2,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-1,
-2,
-2,
-1,
-2,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-1,
-2,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
--1,
--2,
--4,
--5,
--6,
--8,
--10,
--10,
--13,
--13,
--16,
--16,
--18,
--20,
--21,
--22,
--24,
--25,
--27,
--28,
--30,
--31,
--32,
--34,
--35,
--37,
--38,
--39,
--41,
--42,
--44,
--45,
--46,
--48,
--49,
--51,
--52,
--53,
--55,
--56,
--57,
--59,
--60,
--61,
--63,
--64,
--65,
--67,
--68,
--69,
--71,
--71,
--74,
--74,
--76,
--77,
--78,
--79,
--81,
--82,
--83,
--84,
--86,
--87,
--88,
--89,
--90,
--92,
--92,
--94,
--95,
--96,
--98,
--98,
--100,
--100,
--102,
--103,
--104,
--105,
--106,
--107,
--108,
--109,
--111,
--111,
--112,
--113,
--115,
--115,
--116,
--117,
--119,
--119,
--120,
--121,
--121,
--123,
--124,
--124,
--126,
--126,
--127,
--128,
--129,
--129,
--131,
--131,
--132,
--133,
--133,
--135,
--135,
--135,
--137,
--137,
--138,
--138,
--140,
--139,
--141,
--141,
--142,
--142,
--143,
--144,
--144,
--145,
--145,
--146,
--146,
--147,
--148,
--148,
--148,
--149,
--149,
--150,
--150,
--151,
--151,
--152,
--151,
--153,
--152,
--153,
--154,
--153,
--154,
--154,
--155,
--155,
--155,
--155,
--156,
--156,
--156,
--156,
--157,
--156,
--157,
--157,
--157,
--157,
--158,
--157,
--158,
--158,
--157,
--158,
--158,
--158,
--158,
--158,
--158,
--158,
--158,
--158,
--158,
--157,
--158,
--158,
--157,
--158,
--157,
--158,
--157,
--157,
--157,
--156,
--157,
--156,
--156,
--156,
--156,
--155,
--155,
--155,
--155,
--154,
--155,
--153,
--154,
--153,
--153,
--152,
--153,
--151,
--152,
--151,
--150,
--151,
--150,
--149,
--149,
--149,
--148,
--147,
--148,
--146,
--146,
--146,
--145,
--145,
--144,
--144,
--143,
--143,
--141,
--142,
--141,
--140,
--140,
--139,
--138,
--138,
--137,
--137,
--136,
--135,
--135,
--134,
--133,
--132,
--132,
--132,
--130,
--130,
--129,
--128,
--128,
--127,
--126,
--125,
--125,
--124,
--123,
--122,
--122,
--121,
--120,
--119,
--118,
--118,
--116,
--116,
--115,
--115,
--113,
--113,
--111,
--111,
--110,
--109,
--109,
--107,
--107,
--105,
--105,
--104,
--103,
--102,
--101,
--101,
--98,
--99,
--97,
--97,
--96,
--94,
--94,
--93,
--92,
--92,
--90,
--89,
--88,
--88,
--86,
--86,
--84,
--84,
--82,
--82,
--81,
--80,
--78,
--78,
--77,
--76,
--75,
--74,
--73,
--72,
--72,
--70,
--69,
--68,
--68,
--66,
--65,
--65,
--63,
--63,
--61,
--61,
--59,
--59,
--58,
--56,
--56,
--55,
--54,
--53,
--52,
--51,
--50,
--49,
--48,
--47,
--47,
--45,
--44,
--44,
--42,
--42,
--41,
--39,
--39,
--38,
--37,
--36,
--36,
--34,
--33,
--33,
--31,
--31,
--30,
--29,
--28,
--27,
--26,
--25,
--25,
--23,
--23,
--22,
--21,
--20,
--20,
--18,
--18,
--17,
--16,
--15,
--14,
--14,
--13,
--12,
--11,
--10,
--10,
--9,
--8,
--7,
--6,
--6,
--5,
--4,
--4,
--2,
--2,
--2,
-0,
-0,
-1,
-2,
-2,
-3,
-4,
-4,
-5,
-6,
-6,
-7,
-8,
-9,
-9,
-9,
-11,
-11,
-11,
-12,
-13,
-13,
-14,
-15,
-15,
-16,
-16,
-17,
-17,
-18,
-19,
-19,
-19,
-20,
-21,
-21,
-21,
-22,
-23,
-23,
-24,
-23,
-25,
-25,
-25,
-26,
-26,
-27,
-27,
-27,
-28,
-28,
-29,
-29,
-30,
-29,
-30,
-31,
-31,
-31,
-32,
-32,
-32,
-32,
-33,
-33,
-34,
-33,
-34,
-35,
-34,
-35,
-35,
-35,
-36,
-36,
-36,
-36,
-37,
-36,
-37,
-37,
-38,
-37,
-38,
-37,
-38,
-39,
-38,
-38,
-39,
-39,
-38,
-39,
-39,
-40,
-39,
-39,
-40,
-39,
-40,
-40,
-39,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-41,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-39,
-40,
-40,
-39,
-40,
-39,
-40,
-39,
-39,
-39,
-39,
-39,
-39,
-39,
-38,
-38,
-39,
-38,
-38,
-38,
-37,
-38,
-37,
-38,
-37,
-36,
-37,
-37,
-36,
-36,
-36,
-36,
-36,
-35,
-35,
-36,
-34,
-35,
-34,
-35,
-34,
-33,
-34,
-33,
-33,
-33,
-33,
-32,
-32,
-32,
-31,
-31,
-31,
-31,
-30,
-31,
-30,
-30,
-29,
-30,
-29,
-28,
-29,
-28,
-28,
-28,
-27,
-27,
-27,
-26,
-27,
-25,
-26,
-25,
-26,
-24,
-25,
-24,
-24,
-23,
-24,
-23,
-22,
-23,
-22,
-22,
-21,
-21,
-21,
-21,
-20,
-20,
-19,
-20,
-19,
-18,
-19,
-18,
-18,
-17,
-17,
-17,
-17,
-16,
-16,
-15,
-16,
-15,
-14,
-15,
-14,
-14,
-13,
-13,
-13,
-12,
-13,
-12,
-11,
-12,
-11,
-10,
-11,
-10,
-10,
-9,
-9,
-9,
-9,
-8,
-8,
-8,
-8,
-7,
-7,
-6,
-7,
-6,
-5,
-6,
-5,
-5,
-5,
-4,
-4,
-4,
-3,
-4,
-3,
-3,
-2,
-2,
-2,
-2,
-1,
-2,
-1,
-0,
-1,
-0,
-0,
-0,
--1,
--1,
--1,
--1,
--1,
--2,
--2,
--2,
--2,
--3,
--3,
--3,
--3,
--3,
--4,
--4,
--4,
--4,
--5,
--4,
--5,
--5,
--6,
--5,
--6,
--6,
--6,
--6,
--6,
--7,
--6,
--7,
--7,
--7,
--8,
--7,
--8,
--8,
--8,
--8,
--8,
--9,
--8,
--9,
--9,
--9,
--9,
--9,
--10,
--9,
--10,
--10,
--10,
--10,
--10,
--10,
--11,
--10,
--11,
--10,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--12,
--11,
--12,
--12,
--11,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--13,
--12,
--12,
--13,
--12,
--13,
--12,
--13,
--13,
--12,
--13,
--13,
--12,
--13,
--13,
--13,
--13,
--12,
--13,
--13,
--13,
--13,
--13,
--12,
--13,
--13,
--13,
--13,
--13,
--12,
--13,
--13,
--13,
--12,
--13,
--13,
--13,
--12,
--13,
--13,
--12,
--13,
--12,
--13,
--12,
--13,
--12,
--12,
--13,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--11,
--12,
--11,
--12,
--11,
--12,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--10,
--11,
--11,
--10,
--10,
--11,
--10,
--10,
--10,
--10,
--10,
--9,
--10,
--10,
--9,
--10,
--9,
--8,
--9,
--9,
--9,
--9,
--9,
--9,
--8,
--9,
--8,
--9,
--8,
--8,
--8,
--8,
--8,
--7,
--8,
--8,
--7,
--7,
--8,
--7,
--7,
--7,
--7,
--6,
--7,
--7,
--6,
--7,
--6,
--6,
--6,
--6,
--6,
--6,
--5,
--6,
--5,
--6,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--4,
--5,
--4,
--4,
--5,
--4,
--4,
--4,
--3,
--4,
--4,
--3,
--4,
--3,
--3,
--4,
--3,
--3,
--2,
--3,
--3,
--3,
--2,
--3,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--1,
--2,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-2,
-1,
-1,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-2,
-2,
-1,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-3,
-2,
-2,
-3,
-2,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-3,
-2,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-2,
-3,
-3,
-2,
-3,
-3,
-2,
-3,
-2,
-3,
-3,
-2,
-2,
-3,
-2,
-3,
-2,
-2,
-3,
-2,
-2,
-3,
-2,
-2,
-2,
-2,
-3,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-0,
-2,
-2,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-1,
-2,
-2,
-1,
-2,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-1,
-2,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1
-};
Index: pjproject/branches/split-3rd-party/third_party/README.txt
===================================================================
--- pjproject/branches/split-3rd-party/third_party/README.txt	(revision 1174)
+++ pjproject/branches/split-3rd-party/third_party/README.txt	(revision 1175)
@@ -15,3 +15,4 @@
 portaudio:	SVN -r1186
 gsm:		gsm-1.0.12
-resample:	resample-1.8.1
+ilbc:		from RFC
+plc_steveu:	Steve Underwood's PLC
Index: pjproject/branches/split-3rd-party/third_party/mp3/BladeMP3EncDLL.h
===================================================================
--- pjproject/branches/split-3rd-party/third_party/mp3/BladeMP3EncDLL.h	(revision 1175)
+++ pjproject/branches/split-3rd-party/third_party/mp3/BladeMP3EncDLL.h	(revision 1175)
@@ -0,0 +1,283 @@
+/*
+ * Blade Type of DLL Interface for Lame encoder
+ *
+ * Copyright (c) 1999-2002 A.L. Faber
+ * Based on bladedll.h version 1.0 written by Jukka Poikolainen
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA  02111-1307, USA.
+ */
+
+//#define _BLADEDLL 1
+
+#ifndef ___BLADEDLL_H_INCLUDED___
+#define ___BLADEDLL_H_INCLUDED___
+
+#ifdef __GNUC__
+//#define ATTRIBUTE_PACKED	__attribute__((packed))
+#define ATTRIBUTE_PACKED
+#else
+#define ATTRIBUTE_PACKED
+#pragma pack(push)
+#pragma pack(1)
+#endif
+
+#ifdef	__cplusplus
+extern "C" {
+#endif
+
+/* encoding formats */
+
+#define		BE_CONFIG_MP3			0										
+#define		BE_CONFIG_LAME			256		
+
+/* type definitions */
+
+typedef		unsigned long			HBE_STREAM;
+typedef		HBE_STREAM				*PHBE_STREAM;
+typedef		unsigned long			BE_ERR;
+
+/* error codes */
+
+#define		BE_ERR_SUCCESSFUL					0x00000000
+#define		BE_ERR_INVALID_FORMAT				0x00000001
+#define		BE_ERR_INVALID_FORMAT_PARAMETERS	0x00000002
+#define		BE_ERR_NO_MORE_HANDLES				0x00000003
+#define		BE_ERR_INVALID_HANDLE				0x00000004
+#define		BE_ERR_BUFFER_TOO_SMALL				0x00000005
+
+/* other constants */
+
+#define		BE_MAX_HOMEPAGE			128
+
+/* format specific variables */
+
+#define		BE_MP3_MODE_STEREO		0
+#define		BE_MP3_MODE_JSTEREO		1
+#define		BE_MP3_MODE_DUALCHANNEL	2
+#define		BE_MP3_MODE_MONO		3
+
+
+
+#define		MPEG1	1
+#define		MPEG2	0
+
+#ifdef _BLADEDLL
+#undef FLOAT
+	#include <Windows.h>
+#endif
+
+#define CURRENT_STRUCT_VERSION 1
+#define CURRENT_STRUCT_SIZE sizeof(BE_CONFIG)	// is currently 331 bytes
+
+
+typedef enum
+{
+	VBR_METHOD_NONE			= -1,
+	VBR_METHOD_DEFAULT		=  0,
+	VBR_METHOD_OLD			=  1,
+	VBR_METHOD_NEW			=  2,
+	VBR_METHOD_MTRH			=  3,
+	VBR_METHOD_ABR			=  4
+} VBRMETHOD;
+
+typedef enum 
+{
+	LQP_NOPRESET			=-1,
+
+	// QUALITY PRESETS
+	LQP_NORMAL_QUALITY		= 0,
+	LQP_LOW_QUALITY			= 1,
+	LQP_HIGH_QUALITY		= 2,
+	LQP_VOICE_QUALITY		= 3,
+	LQP_R3MIX				= 4,
+	LQP_VERYHIGH_QUALITY	= 5,
+	LQP_STANDARD			= 6,
+	LQP_FAST_STANDARD		= 7,
+	LQP_EXTREME				= 8,
+	LQP_FAST_EXTREME		= 9,
+	LQP_INSANE				= 10,
+	LQP_ABR					= 11,
+	LQP_CBR					= 12,
+	LQP_MEDIUM				= 13,
+	LQP_FAST_MEDIUM			= 14,
+
+	// NEW PRESET VALUES
+	LQP_PHONE	=1000,
+	LQP_SW		=2000,
+	LQP_AM		=3000,
+	LQP_FM		=4000,
+	LQP_VOICE	=5000,
+	LQP_RADIO	=6000,
+	LQP_TAPE	=7000,
+	LQP_HIFI	=8000,
+	LQP_CD		=9000,
+	LQP_STUDIO	=10000
+
+} LAME_QUALITY_PRESET;
+
+
+
+typedef struct	{
+	unsigned long	dwConfig;			// BE_CONFIG_XXXXX
+								// Currently only BE_CONFIG_MP3 is supported
+	union	{
+
+		struct	{
+
+			unsigned long	dwSampleRate;		// 48000, 44100 and 32000 allowed
+			unsigned char	byMode;			// BE_MP3_MODE_STEREO, BE_MP3_MODE_DUALCHANNEL, BE_MP3_MODE_MONO
+			unsigned short	wBitrate;		// 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256 and 320 allowed
+			int	bPrivate;		
+			int	bCRC;
+			int	bCopyright;
+			int	bOriginal;
+
+			} mp3;					// BE_CONFIG_MP3
+
+			struct
+			{
+			// STRUCTURE INFORMATION
+			unsigned long			dwStructVersion;	
+			unsigned long			dwStructSize;
+
+			// BASIC ENCODER SETTINGS
+			unsigned long			dwSampleRate;		// SAMPLERATE OF INPUT FILE
+			unsigned long			dwReSampleRate;		// DOWNSAMPLERATE, 0=ENCODER DECIDES  
+			long			nMode;				// BE_MP3_MODE_STEREO, BE_MP3_MODE_DUALCHANNEL, BE_MP3_MODE_MONO
+			unsigned long			dwBitrate;			// CBR bitrate, VBR min bitrate
+			unsigned long			dwMaxBitrate;		// CBR ignored, VBR Max bitrate
+			long			nPreset;			// Quality preset, use one of the settings of the LAME_QUALITY_PRESET enum
+			unsigned long			dwMpegVersion;		// FUTURE USE, MPEG-1 OR MPEG-2
+			unsigned long			dwPsyModel;			// FUTURE USE, SET TO 0
+			unsigned long			dwEmphasis;			// FUTURE USE, SET TO 0
+
+			// BIT STREAM SETTINGS
+			int			bPrivate;			// Set Private Bit (TRUE/FALSE)
+			int			bCRC;				// Insert CRC (TRUE/FALSE)
+			int			bCopyright;			// Set Copyright Bit (TRUE/FALSE)
+			int			bOriginal;			// Set Original Bit (TRUE/FALSE)
+			
+			// VBR STUFF
+			int			bWriteVBRHeader;	// WRITE XING VBR HEADER (TRUE/FALSE)
+			int			bEnableVBR;			// USE VBR ENCODING (TRUE/FALSE)
+			int				nVBRQuality;		// VBR QUALITY 0..9
+			unsigned long			dwVbrAbr_bps;		// Use ABR in stead of nVBRQuality
+			VBRMETHOD		nVbrMethod;
+			int			bNoRes;				// Disable Bit resorvoir (TRUE/FALSE)
+
+			// MISC SETTINGS
+			int			bStrictIso;			// Use strict ISO encoding rules (TRUE/FALSE)
+			unsigned short			nQuality;			// Quality Setting, HIGH unsigned char should be NOT LOW byte, otherwhise quality=5
+
+			// FUTURE USE, SET TO 0, align strucutre to 331 bytes
+			unsigned char			btReserved[255-4*sizeof(unsigned long) - sizeof( unsigned short )];
+
+			} LHV1;					// LAME header version 1
+
+		struct	{
+
+			unsigned long	dwSampleRate;
+			unsigned char	byMode;
+			unsigned short	wBitrate;
+			unsigned char	byEncodingMethod;
+
+		} aac;
+
+	} format;
+		
+} BE_CONFIG, *PBE_CONFIG ATTRIBUTE_PACKED;
+
+
+typedef struct	{
+
+	// BladeEnc DLL Version number
+
+	unsigned char	byDLLMajorVersion;
+	unsigned char	byDLLMinorVersion;
+
+	// BladeEnc Engine Version Number
+
+	unsigned char	byMajorVersion;
+	unsigned char	byMinorVersion;
+
+	// DLL Release date
+
+	unsigned char	byDay;
+	unsigned char	byMonth;
+	unsigned short	wYear;
+
+	// BladeEnc	Homepage URL
+
+	char	zHomepage[BE_MAX_HOMEPAGE + 1];	
+
+	unsigned char	byAlphaLevel;
+	unsigned char	byBetaLevel;
+	unsigned char	byMMXEnabled;
+
+	unsigned char	btReserved[125];
+
+
+} BE_VERSION, *PBE_VERSION ATTRIBUTE_PACKED;
+
+#ifndef _BLADEDLL
+
+typedef unsigned long	(*BEINITSTREAM)			(PBE_CONFIG, unsigned long *, unsigned long *, PHBE_STREAM);
+typedef unsigned long	(*BEENCODECHUNK)		(HBE_STREAM, unsigned long, short *, unsigned char *, unsigned long *);
+
+// added for floating point audio  -- DSPguru, jd
+typedef unsigned long	(*BEENCODECHUNKFLOATS16NI)	(HBE_STREAM, unsigned long, float *, float *, unsigned char *, unsigned long *);
+typedef unsigned long	(*BEDEINITSTREAM)			(HBE_STREAM, unsigned char *, unsigned long *);
+typedef unsigned long	(*BECLOSESTREAM)			(HBE_STREAM);
+typedef void	(*BEVERSION)				(PBE_VERSION);
+typedef unsigned long	(*BEWRITEVBRHEADER)			(const char*);
+typedef unsigned long	(*BEWRITEINFOTAG)			(HBE_STREAM, const char * );
+
+#define	TEXT_BEINITSTREAM				"beInitStream"
+#define	TEXT_BEENCODECHUNK				"beEncodeChunk"
+#define	TEXT_BEENCODECHUNKFLOATS16NI	"beEncodeChunkFloatS16NI"
+#define	TEXT_BEDEINITSTREAM				"beDeinitStream"
+#define	TEXT_BECLOSESTREAM				"beCloseStream"
+#define	TEXT_BEVERSION					"beVersion"
+#define	TEXT_BEWRITEVBRHEADER			"beWriteVBRHeader"
+#define	TEXT_BEFLUSHNOGAP				"beFlushNoGap"
+#define	TEXT_BEWRITEINFOTAG				"beWriteInfoTag"
+
+
+#else
+
+__declspec(dllexport) unsigned long	beInitStream(PBE_CONFIG pbeConfig, Punsigned long dwSamples, Punsigned long dwBufferSize, PHBE_STREAM phbeStream);
+__declspec(dllexport) unsigned long	beEncodeChunk(HBE_STREAM hbeStream, unsigned long nSamples, PSHORT pSamples, Punsigned char pOutput, Punsigned long pdwOutput);
+
+// added for floating point audio  -- DSPguru, jd
+__declspec(dllexport) unsigned long	beEncodeChunkFloatS16NI(HBE_STREAM hbeStream, unsigned long nSamples, PFLOAT buffer_l, PFLOAT buffer_r, Punsigned char pOutput, Punsigned long pdwOutput);
+__declspec(dllexport) unsigned long	beDeinitStream(HBE_STREAM hbeStream, Punsigned char pOutput, Punsigned long pdwOutput);
+__declspec(dllexport) unsigned long	beCloseStream(HBE_STREAM hbeStream);
+__declspec(dllexport) VOID		beVersion(PBE_VERSION pbeVersion);
+__declspec(dllexport) unsigned long	beWriteVBRHeader(LPCSTR lpszFileName);
+__declspec(dllexport) unsigned long	beFlushNoGap(HBE_STREAM hbeStream, Punsigned char pOutput, Punsigned long pdwOutput);
+__declspec(dllexport) unsigned long	beWriteInfoTag( HBE_STREAM hbeStream, LPCSTR lpszFileName );
+
+#endif
+
+#ifndef __GNUC__
+#pragma pack(pop)
+#endif
+
+#ifdef	__cplusplus
+}
+#endif
+
+#endif
Index: pjproject/branches/split-3rd-party/third_party/mp3/mp3_writer.c
===================================================================
--- pjproject/branches/split-3rd-party/third_party/mp3/mp3_writer.c	(revision 1175)
+++ pjproject/branches/split-3rd-party/third_party/mp3/mp3_writer.c	(revision 1175)
@@ -0,0 +1,563 @@
+/* $Id$ */
+/* 
+ * Copyright (C) 2003-2007 Benny Prijono <benny@prijono.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ */
+
+/*
+ * Contributed by:
+ *  Toni < buldozer at aufbix dot org >
+ */
+#include <pjmedia/mp3_port.h>
+#include <pjmedia/errno.h>
+#include <pj/assert.h>
+#include <pj/file_access.h>
+#include <pj/file_io.h>
+#include <pj/log.h>
+#include <pj/pool.h>
+#include <pj/string.h>
+#include <pj/unicode.h>
+
+
+/* Include BladeDLL declarations */
+#include "BladeMP3EncDLL.h"
+
+
+#define THIS_FILE	    "mp3_writer.c"
+#define SIGNATURE	    PJMEDIA_PORT_SIGNATURE('F', 'W', 'M', '3')
+#define BYTES_PER_SAMPLE    2
+
+static struct BladeDLL
+{
+    void		*hModule;
+    int			 refCount;
+    BEINITSTREAM	 beInitStream;
+    BEENCODECHUNK	 beEncodeChunk;
+    BEDEINITSTREAM	 beDeinitStream;
+    BECLOSESTREAM	 beCloseStream;
+    BEVERSION		 beVersion;
+    BEWRITEVBRHEADER	 beWriteVBRHeader;
+    BEWRITEINFOTAG	 beWriteInfoTag;
+} BladeDLL;
+
+
+struct mp3_file_port
+{
+    pjmedia_port    base;
+    pj_size_t	    total;
+    pj_oshandle_t   fd;
+    pj_size_t	    cb_size;
+    pj_status_t	   (*cb)(pjmedia_port*, void*);
+
+    unsigned	    silence_duration;
+
+    pj_str_t			mp3_filename;
+    pjmedia_mp3_encoder_option  mp3_option;
+    unsigned		        mp3_samples_per_frame;
+    pj_int16_t		       *mp3_sample_buf;
+    unsigned			mp3_sample_pos;
+    HBE_STREAM		        mp3_stream;
+    unsigned char	       *mp3_buf;
+};
+
+
+static pj_status_t file_put_frame(pjmedia_port *this_port, 
+				  const pjmedia_frame *frame);
+static pj_status_t file_get_frame(pjmedia_port *this_port, 
+				  pjmedia_frame *frame);
+static pj_status_t file_on_destroy(pjmedia_port *this_port);
+
+
+#if defined(PJ_WIN32) || defined(_WIN32) || defined(WIN32)
+
+#include <windows.h>
+#define DLL_NAME    PJ_T("LAME_ENC.DLL")
+
+/*
+ * Load BladeEncoder DLL.
+ */
+static pj_status_t init_blade_dll(void)
+{
+    if (BladeDLL.refCount == 0) {
+	#define GET_PROC(type, name)  \
+	    BladeDLL.name = (type)GetProcAddress(BladeDLL.hModule, PJ_T(#name)); \
+	    if (BladeDLL.name == NULL) { \
+		PJ_LOG(1,(THIS_FILE, "Unable to find %s in %s", #name, DLL_NAME)); \
+		return PJ_RETURN_OS_ERROR(GetLastError()); \
+	    }
+
+	BE_VERSION beVersion;
+	BladeDLL.hModule = (void*)LoadLibrary(DLL_NAME);
+	if (BladeDLL.hModule == NULL) {
+	    pj_status_t status = PJ_RETURN_OS_ERROR(GetLastError());
+	    char errmsg[PJ_ERR_MSG_SIZE];
+
+	    pj_strerror(status, errmsg, sizeof(errmsg));
+	    PJ_LOG(1,(THIS_FILE, "Unable to load %s: %s", DLL_NAME, errmsg));
+	    return status;
+	}
+
+	GET_PROC(BEINITSTREAM, beInitStream);
+	GET_PROC(BEENCODECHUNK, beEncodeChunk);
+	GET_PROC(BEDEINITSTREAM, beDeinitStream);
+	GET_PROC(BECLOSESTREAM, beCloseStream);
+	GET_PROC(BEVERSION, beVersion);
+	GET_PROC(BEWRITEVBRHEADER, beWriteVBRHeader);
+	GET_PROC(BEWRITEINFOTAG, beWriteInfoTag);
+
+	#undef GET_PROC
+
+	BladeDLL.beVersion(&beVersion);
+	PJ_LOG(4,(THIS_FILE, "%s encoder v%d.%d loaded (%s)", DLL_NAME,
+		  beVersion.byMajorVersion, beVersion.byMinorVersion,
+		  beVersion.zHomepage));
+    }
+    ++BladeDLL.refCount;
+    return PJ_SUCCESS;
+}
+
+/*
+ * Decrement the reference counter of the DLL.
+ */
+static void deinit_blade_dll()
+{
+    --BladeDLL.refCount;
+    if (BladeDLL.refCount == 0 && BladeDLL.hModule) {
+	FreeLibrary(BladeDLL.hModule);
+	BladeDLL.hModule = NULL;
+	PJ_LOG(4,(THIS_FILE, "%s unloaded", DLL_NAME));
+    }
+}
+
+#else
+
+static pj_status_t init_blade_dll(void)
+{
+    PJ_LOG(1,(THIS_FILE, "Error: MP3 writer port only works on Windows for now"));
+    return PJ_ENOTSUP;
+}
+
+static void deinit_blade_dll()
+{
+}
+#endif
+
+
+
+/*
+ * Initialize MP3 encoder.
+ */
+static pj_status_t init_mp3_encoder(struct mp3_file_port *fport,
+				    pj_pool_t *pool)
+{
+    BE_CONFIG LConfig;
+    unsigned  long InSamples;
+    unsigned  long OutBuffSize;
+    long MP3Err;
+
+    /*
+     * Initialize encoder configuration.
+     */
+    pj_bzero(&LConfig, sizeof(BE_CONFIG));
+    LConfig.dwConfig = BE_CONFIG_LAME;
+    LConfig.format.LHV1.dwStructVersion = 1;
+    LConfig.format.LHV1.dwStructSize = sizeof(BE_CONFIG);
+    LConfig.format.LHV1.dwSampleRate = fport->base.info.clock_rate;
+    LConfig.format.LHV1.dwReSampleRate = 0;
+
+    if (fport->base.info.channel_count==1)
+	LConfig.format.LHV1.nMode = BE_MP3_MODE_MONO;
+    else if (fport->base.info.channel_count==2)
+	LConfig.format.LHV1.nMode = BE_MP3_MODE_STEREO;
+    else
+	return PJMEDIA_ENCCHANNEL;
+
+    LConfig.format.LHV1.dwBitrate = fport->mp3_option.bit_rate / 1000;
+    LConfig.format.LHV1.nPreset = LQP_NOPRESET;
+    LConfig.format.LHV1.bCopyright = 0;
+    LConfig.format.LHV1.bCRC = 1;
+    LConfig.format.LHV1.bOriginal = 1;
+    LConfig.format.LHV1.bPrivate = 0;
+
+    if (!fport->mp3_option.vbr) {
+	LConfig.format.LHV1.nVbrMethod = VBR_METHOD_NONE;
+	LConfig.format.LHV1.bWriteVBRHeader = 0;
+	LConfig.format.LHV1.bEnableVBR = 0;
+    } else {
+	LConfig.format.LHV1.nVbrMethod = VBR_METHOD_DEFAULT;
+	LConfig.format.LHV1.bWriteVBRHeader = 1;
+	LConfig.format.LHV1.dwVbrAbr_bps = fport->mp3_option.bit_rate;
+	LConfig.format.LHV1.nVBRQuality =  (pj_uint16_t)
+					   fport->mp3_option.quality;
+	LConfig.format.LHV1.bEnableVBR = 1;
+    }
+
+    LConfig.format.LHV1.nQuality = (pj_uint16_t) 
+				   (((0-fport->mp3_option.quality-1)<<8) | 
+				    fport->mp3_option.quality);
+
+    /*
+     * Init MP3 stream.
+     */
+    InSamples = 0;
+    MP3Err = BladeDLL.beInitStream(&LConfig, &InSamples, &OutBuffSize,
+				   &fport->mp3_stream);
+    if (MP3Err != BE_ERR_SUCCESSFUL) 
+	return PJMEDIA_ERROR;
+
+    /*
+     * Allocate sample buffer.
+     */
+    fport->mp3_samples_per_frame = (unsigned)InSamples;
+    fport->mp3_sample_buf = pj_pool_alloc(pool, fport->mp3_samples_per_frame * 2);
+    if (!fport->mp3_sample_buf)
+	return PJ_ENOMEM;
+
+    /*
+     * Allocate encoded MP3 buffer.
+     */
+    fport->mp3_buf = pj_pool_alloc(pool, (pj_size_t)OutBuffSize);
+    if (fport->mp3_buf == NULL)
+	return PJ_ENOMEM;
+
+    
+    return PJ_SUCCESS;
+}
+
+
+/*
+ * Create MP3 file writer port.
+ */
+PJ_DEF(pj_status_t) 
+pjmedia_mp3_writer_port_create( pj_pool_t *pool,
+				const char *filename,
+				unsigned sampling_rate,
+				unsigned channel_count,
+				unsigned samples_per_frame,
+				unsigned bits_per_sample,
+				const pjmedia_mp3_encoder_option *param_option,
+				pjmedia_port **p_port )
+{
+    struct mp3_file_port *fport;
+    pj_status_t status;
+
+    status = init_blade_dll();
+    if (status != PJ_SUCCESS)
+	return status;
+
+    /* Check arguments. */
+    PJ_ASSERT_RETURN(pool && filename && p_port, PJ_EINVAL);
+
+    /* Only supports 16bits per sample for now. */
+    PJ_ASSERT_RETURN(bits_per_sample == 16, PJ_EINVAL);
+
+    /* Create file port instance. */
+    fport = pj_pool_zalloc(pool, sizeof(struct mp3_file_port));
+    PJ_ASSERT_RETURN(fport != NULL, PJ_ENOMEM);
+
+    /* Initialize port info. */
+    pj_strdup2_with_null(pool, &fport->mp3_filename, filename);
+    pjmedia_port_info_init(&fport->base.info, &fport->mp3_filename, SIGNATURE,
+			   sampling_rate, channel_count, bits_per_sample,
+			   samples_per_frame);
+
+    fport->base.get_frame = &file_get_frame;
+    fport->base.put_frame = &file_put_frame;
+    fport->base.on_destroy = &file_on_destroy;
+
+
+    /* Open file in write and read mode.
+     * We need the read mode because we'll modify the WAVE header once
+     * the recording has completed.
+     */
+    status = pj_file_open(pool, filename, PJ_O_WRONLY, &fport->fd);
+    if (status != PJ_SUCCESS) {
+	deinit_blade_dll();
+	return status;
+    }
+
+    /* Copy and initialize option with default settings */
+    if (param_option) {
+	pj_memcpy(&fport->mp3_option, param_option, 
+		   sizeof(pjmedia_mp3_encoder_option));
+    } else {
+	pj_bzero(&fport->mp3_option, sizeof(pjmedia_mp3_encoder_option));
+	fport->mp3_option.vbr = PJ_TRUE;
+    }
+
+    /* Calculate bitrate if it's not specified, only if it's not VBR. */
+    if (fport->mp3_option.bit_rate == 0 && !fport->mp3_option.vbr) 
+	fport->mp3_option.bit_rate = sampling_rate * channel_count;
+
+    /* Set default quality if it's not specified */
+    if (fport->mp3_option.quality == 0) 
+	fport->mp3_option.quality = 2;
+
+    /* Init mp3 encoder */
+    status = init_mp3_encoder(fport, pool);
+    if (status != PJ_SUCCESS) {
+	pj_file_close(fport->fd);
+	deinit_blade_dll();
+	return status;
+    }
+
+    /* Done. */
+    *p_port = &fport->base;
+
+    PJ_LOG(4,(THIS_FILE, 
+	      "MP3 file writer '%.*s' created: samp.rate=%dKHz, "
+	      "bitrate=%dkbps%s, quality=%d",
+	      (int)fport->base.info.name.slen,
+	      fport->base.info.name.ptr,
+	      fport->base.info.clock_rate/1000,
+	      fport->mp3_option.bit_rate/1000,
+	      (fport->mp3_option.vbr ? " (VBR)" : ""),
+	      fport->mp3_option.quality));
+
+    return PJ_SUCCESS;
+}
+
+
+
+/*
+ * Register callback.
+ */
+PJ_DEF(pj_status_t) 
+pjmedia_mp3_writer_port_set_cb( pjmedia_port *port,
+				pj_size_t pos,
+				void *user_data,
+			        pj_status_t (*cb)(pjmedia_port *port,
+						  void *usr_data))
+{
+    struct mp3_file_port *fport;
+
+    /* Sanity check */
+    PJ_ASSERT_RETURN(port && cb, PJ_EINVAL);
+
+    /* Check that this is really a writer port */
+    PJ_ASSERT_RETURN(port->info.signature == SIGNATURE, PJ_EINVALIDOP);
+
+    fport = (struct mp3_file_port*) port;
+
+    fport->cb_size = pos;
+    fport->base.port_data.pdata = user_data;
+    fport->cb = cb;
+
+    return PJ_SUCCESS;
+
+}
+
+
+/*
+ * Put a frame into the buffer. When the buffer is full, flush the buffer
+ * to the file.
+ */
+static pj_status_t file_put_frame(pjmedia_port *this_port, 
+				  const pjmedia_frame *frame)
+{
+    struct mp3_file_port *fport = (struct mp3_file_port *)this_port;
+    unsigned long MP3Err;
+    pj_ssize_t	bytes;
+    pj_status_t status;
+    unsigned long WriteSize;
+
+    /* Record silence if input is no-frame */
+    if (frame->type == PJMEDIA_FRAME_TYPE_NONE || frame->size == 0) {
+	unsigned samples_left = fport->base.info.samples_per_frame;
+	unsigned samples_copied = 0;
+
+	/* Only want to record at most 1 second of silence */
+	if (fport->silence_duration >= fport->base.info.clock_rate)
+	    return PJ_SUCCESS;
+
+	while (samples_left) {
+	    unsigned samples_needed = fport->mp3_samples_per_frame -
+				      fport->mp3_sample_pos;
+	    if (samples_needed > samples_left)
+		samples_needed = samples_left;
+
+	    pjmedia_zero_samples(fport->mp3_sample_buf + fport->mp3_sample_pos,
+				 samples_needed);
+	    fport->mp3_sample_pos += samples_needed;
+	    samples_left -= samples_needed;
+	    samples_copied += samples_needed;
+
+	    /* Encode if we have full frame */
+	    if (fport->mp3_sample_pos == fport->mp3_samples_per_frame) {
+		
+		/* Clear position */
+		fport->mp3_sample_pos = 0;
+
+		/* Encode ! */
+		MP3Err = BladeDLL.beEncodeChunk(fport->mp3_stream,
+						fport->mp3_samples_per_frame,
+						fport->mp3_sample_buf, 
+						fport->mp3_buf, 
+						&WriteSize);
+		if (MP3Err != BE_ERR_SUCCESSFUL)
+		    return PJMEDIA_ERROR;
+
+		/* Write the chunk */
+		bytes = WriteSize;
+		status = pj_file_write(fport->fd, fport->mp3_buf, &bytes);
+		if (status != PJ_SUCCESS)
+		    return status;
+
+		/* Increment total written. */
+		fport->total += bytes;
+	    }
+	}
+
+	fport->silence_duration += fport->base.info.samples_per_frame;
+
+    }
+    /* If encoder is expecting different sample size, then we need to
+     * buffer the samples.
+     */
+    else if (fport->mp3_samples_per_frame != 
+	     fport->base.info.samples_per_frame) 
+    {
+	unsigned samples_left = frame->size / 2;
+	unsigned samples_copied = 0;
+	const pj_int16_t *src_samples = frame->buf;
+
+	fport->silence_duration = 0;
+
+	while (samples_left) {
+	    unsigned samples_needed = fport->mp3_samples_per_frame -
+				      fport->mp3_sample_pos;
+	    if (samples_needed > samples_left)
+		samples_needed = samples_left;
+
+	    pjmedia_copy_samples(fport->mp3_sample_buf + fport->mp3_sample_pos,
+				 src_samples + samples_copied,
+				 samples_needed);
+	    fport->mp3_sample_pos += samples_needed;
+	    samples_left -= samples_needed;
+	    samples_copied += samples_needed;
+
+	    /* Encode if we have full frame */
+	    if (fport->mp3_sample_pos == fport->mp3_samples_per_frame) {
+		
+		/* Clear position */
+		fport->mp3_sample_pos = 0;
+
+		/* Encode ! */
+		MP3Err = BladeDLL.beEncodeChunk(fport->mp3_stream,
+						fport->mp3_samples_per_frame,
+						fport->mp3_sample_buf, 
+						fport->mp3_buf, 
+						&WriteSize);
+		if (MP3Err != BE_ERR_SUCCESSFUL)
+		    return PJMEDIA_ERROR;
+
+		/* Write the chunk */
+		bytes = WriteSize;
+		status = pj_file_write(fport->fd, fport->mp3_buf, &bytes);
+		if (status != PJ_SUCCESS)
+		    return status;
+
+		/* Increment total written. */
+		fport->total += bytes;
+	    }
+	}
+
+    } else {
+
+	fport->silence_duration = 0;
+
+	/* Encode ! */
+	MP3Err = BladeDLL.beEncodeChunk(fport->mp3_stream,
+					fport->mp3_samples_per_frame,
+					frame->buf, 
+					fport->mp3_buf, 
+					&WriteSize);
+	if (MP3Err != BE_ERR_SUCCESSFUL)
+	    return PJMEDIA_ERROR;
+
+	/* Write the chunk */
+	bytes = WriteSize;
+	status = pj_file_write(fport->fd, fport->mp3_buf, &bytes);
+	if (status != PJ_SUCCESS)
+	    return status;
+
+	/* Increment total written. */
+	fport->total += bytes;
+    }
+
+    /* Increment total written, and check if we need to call callback */
+    
+    if (fport->cb && fport->total >= fport->cb_size) {
+	pj_status_t (*cb)(pjmedia_port*, void*);
+	pj_status_t status;
+
+	cb = fport->cb;
+	fport->cb = NULL;
+
+	status = (*cb)(this_port, this_port->port_data.pdata);
+	return status;
+    }
+
+    return PJ_SUCCESS;
+}
+
+/*
+ * Get frame, basicy is a no-op operation.
+ */
+static pj_status_t file_get_frame(pjmedia_port *this_port, 
+				  pjmedia_frame *frame)
+{
+    PJ_UNUSED_ARG(this_port);
+    PJ_UNUSED_ARG(frame);
+    return PJ_EINVALIDOP;
+}
+
+
+/*
+ * Close the port, modify file header with updated file length.
+ */
+static pj_status_t file_on_destroy(pjmedia_port *this_port)
+{
+    struct mp3_file_port *fport = (struct mp3_file_port*)this_port;
+    pj_status_t status;
+    unsigned long WriteSize;
+    unsigned long MP3Err;
+
+
+    /* Close encoder */
+    MP3Err = BladeDLL.beDeinitStream(fport->mp3_stream, fport->mp3_buf, 
+				     &WriteSize);
+    if (MP3Err == BE_ERR_SUCCESSFUL) {
+	pj_ssize_t bytes = WriteSize;
+	status = pj_file_write(fport->fd, fport->mp3_buf, &bytes);
+    }
+
+    /* Close file */
+    status = pj_file_close(fport->fd);
+
+    /* Write additional VBR header */
+    if (fport->mp3_option.vbr) {
+	MP3Err = BladeDLL.beWriteVBRHeader(fport->mp3_filename.ptr);
+    }
+
+
+    /* Decrement DLL reference counter */
+    deinit_blade_dll();
+
+    /* Done. */
+    return PJ_SUCCESS;
+}
+
Index: pjproject/branches/split-3rd-party/third_party/plc_steveu/plc_steveu.c
===================================================================
--- pjproject/branches/split-3rd-party/third_party/plc_steveu/plc_steveu.c	(revision 1175)
+++ pjproject/branches/split-3rd-party/third_party/plc_steveu/plc_steveu.c	(revision 1175)
@@ -0,0 +1,338 @@
+/*
+ * SpanDSP - a series of DSP components for telephony
+ *
+ * plc.c
+ *
+ * Written by Steve Underwood <steveu@coppice.org>
+ *
+ * Copyright (C) 2004 Steve Underwood
+ *
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * This version may be optionally licenced under the GNU LGPL licence.
+ * This version is disclaimed to DIGIUM for inclusion in the Asterisk project.
+ */
+
+/*! \file */
+
+#include <pjmedia/types.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include <limits.h>
+
+#include "plc_steveu.h"
+
+#if !defined(FALSE)
+#define FALSE 0
+#endif
+#if !defined(TRUE)
+#define TRUE (!FALSE)
+#endif
+
+#ifndef INT16_MAX
+#define INT16_MAX   (32767)
+#endif
+
+#ifndef INT16_MIN
+#define INT16_MIN   (-32767-1)
+#endif
+
+//#define PJ_HAS_RINT	1
+
+
+/* We do a straight line fade to zero volume in 50ms when we are filling in for missing data. */
+#define ATTENUATION_INCREMENT       0.0025                              /* Attenuation per sample */
+
+#define ms_to_samples(t)            (((t)*SAMPLE_RATE)/1000)
+
+
+#if defined(PJ_HAS_RINT) && PJ_HAS_RINT!=0
+#define RINT(d)	rint(d)
+#else
+double RINT(double d)
+{
+    double f = floor(d);
+    double c = ceil(d);
+    
+    if (c-d > d-f)
+	return f;
+    else if (c-d < d-f)
+	return c;
+    else if (d >= 0) {
+	if (f/2==f)
+	    return f;
+	else
+	    return c;
+    } else {
+	if (c/2==c)
+	    return c;
+	else
+	    return f;
+    }
+}
+#endif
+
+
+PJ_INLINE(pj_int16_t) fsaturate(double damp)
+{
+    if (damp > 32767.0)
+	return  INT16_MAX;
+    else if (damp < -32768.0)
+	return  INT16_MIN;
+    else {
+	return (pj_int16_t) RINT(damp);
+    }
+}
+
+static void save_history(plc_state_t *s, pj_int16_t *buf, int len)
+{
+    if (len >= PLC_HISTORY_LEN)
+    {
+        /* Just keep the last part of the new data, starting at the beginning of the buffer */
+        memcpy(s->history, buf + len - PLC_HISTORY_LEN, sizeof(pj_int16_t)*PLC_HISTORY_LEN);
+        s->buf_ptr = 0;
+        return;
+    }
+    if (s->buf_ptr + len > PLC_HISTORY_LEN)
+    {
+        /* Wraps around - must break into two sections */
+        memcpy(s->history + s->buf_ptr, buf, sizeof(pj_int16_t)*(PLC_HISTORY_LEN - s->buf_ptr));
+        len -= (PLC_HISTORY_LEN - s->buf_ptr);
+        memcpy(s->history, buf + (PLC_HISTORY_LEN - s->buf_ptr), sizeof(pj_int16_t)*len);
+        s->buf_ptr = len;
+        return;
+    }
+    /* Can use just one section */
+    memcpy(s->history + s->buf_ptr, buf, sizeof(pj_int16_t)*len);
+    s->buf_ptr += len;
+}
+/*- End of function --------------------------------------------------------*/
+
+static void normalise_history(plc_state_t *s)
+{
+    pj_int16_t tmp[PLC_HISTORY_LEN];
+
+    if (s->buf_ptr == 0)
+        return;
+    memcpy(tmp, s->history, sizeof(pj_int16_t)*s->buf_ptr);
+    memcpy(s->history, s->history + s->buf_ptr, sizeof(pj_int16_t)*(PLC_HISTORY_LEN - s->buf_ptr));
+    memcpy(s->history + PLC_HISTORY_LEN - s->buf_ptr, tmp, sizeof(pj_int16_t)*s->buf_ptr);
+    s->buf_ptr = 0;
+}
+/*- End of function --------------------------------------------------------*/
+
+PJ_INLINE(int) amdf_pitch(int min_pitch, int max_pitch, pj_int16_t amp[], int len)
+{
+    int i;
+    int j;
+    int acc;
+    int min_acc;
+    int pitch;
+
+    pitch = min_pitch;
+    min_acc = INT_MAX;
+    for (i = max_pitch;  i <= min_pitch;  i++)
+    {
+        acc = 0;
+        for (j = 0;  j < len;  j++)
+            acc += abs(amp[i + j] - amp[j]);
+        if (acc < min_acc)
+        {
+            min_acc = acc;
+            pitch = i;
+        }
+    }
+    return pitch;
+}
+/*- End of function --------------------------------------------------------*/
+
+int plc_rx(plc_state_t *s, pj_int16_t amp[], int len)
+{
+    int i;
+    /*int overlap_len;*/
+    int pitch_overlap;
+    float old_step;
+    float new_step;
+    float old_weight;
+    float new_weight;
+    float gain;
+    
+    if (s->missing_samples)
+    {
+        /* Although we have a real signal, we need to smooth it to fit well
+           with the synthetic signal we used for the previous block */
+
+        /* The start of the real data is overlapped with the next 1/4 cycle
+           of the synthetic data. */
+        pitch_overlap = s->pitch >> 2;
+        if (pitch_overlap > len)
+            pitch_overlap = len;
+        gain = 1.0 - s->missing_samples*ATTENUATION_INCREMENT;
+        if (gain < 0.0)
+            gain = 0.0;
+        new_step = 1.0/pitch_overlap;
+        old_step = new_step*gain;
+        new_weight = new_step;
+        old_weight = (1.0 - new_step)*gain;
+        for (i = 0;  i < pitch_overlap;  i++)
+        {
+            amp[i] = fsaturate(old_weight*s->pitchbuf[s->pitch_offset] + new_weight*amp[i]);
+            if (++s->pitch_offset >= s->pitch)
+                s->pitch_offset = 0;
+            new_weight += new_step;
+            old_weight -= old_step;
+            if (old_weight < 0.0)
+                old_weight = 0.0;
+        }
+        s->missing_samples = 0;
+    }
+    save_history(s, amp, len);
+    return len;
+}
+/*- End of function --------------------------------------------------------*/
+
+int plc_fillin(plc_state_t *s, pj_int16_t amp[], int len)
+{
+    /*pj_int16_t tmp[PLC_PITCH_OVERLAP_MAX];*/
+    int i;
+    int pitch_overlap;
+    float old_step;
+    float new_step;
+    float old_weight;
+    float new_weight;
+    float gain;
+    pj_int16_t *orig_amp;
+    int orig_len;
+
+    orig_amp = amp;
+    orig_len = len;
+    if (s->missing_samples == 0)
+    {
+        /* As the gap in real speech starts we need to assess the last known pitch,
+           and prepare the synthetic data we will use for fill-in */
+        normalise_history(s);
+        s->pitch = amdf_pitch(PLC_PITCH_MIN, PLC_PITCH_MAX, s->history + PLC_HISTORY_LEN - CORRELATION_SPAN - PLC_PITCH_MIN, CORRELATION_SPAN);
+        /* We overlap a 1/4 wavelength */
+        pitch_overlap = s->pitch >> 2;
+        /* Cook up a single cycle of pitch, using a single of the real signal with 1/4
+           cycle OLA'ed to make the ends join up nicely */
+        /* The first 3/4 of the cycle is a simple copy */
+        for (i = 0;  i < s->pitch - pitch_overlap;  i++)
+            s->pitchbuf[i] = s->history[PLC_HISTORY_LEN - s->pitch + i];
+        /* The last 1/4 of the cycle is overlapped with the end of the previous cycle */
+        new_step = 1.0/pitch_overlap;
+        new_weight = new_step;
+        for (  ;  i < s->pitch;  i++)
+        {
+            s->pitchbuf[i] = s->history[PLC_HISTORY_LEN - s->pitch + i]*(1.0 - new_weight) + s->history[PLC_HISTORY_LEN - 2*s->pitch + i]*new_weight;
+            new_weight += new_step;
+        }
+        /* We should now be ready to fill in the gap with repeated, decaying cycles
+           of what is in pitchbuf */
+
+        /* We need to OLA the first 1/4 wavelength of the synthetic data, to smooth
+           it into the previous real data. To avoid the need to introduce a delay
+           in the stream, reverse the last 1/4 wavelength, and OLA with that. */
+        gain = 1.0;
+        new_step = 1.0/pitch_overlap;
+        old_step = new_step;
+        new_weight = new_step;
+        old_weight = 1.0 - new_step;
+        for (i = 0;  i < pitch_overlap;  i++)
+        {
+            amp[i] = fsaturate(old_weight*s->history[PLC_HISTORY_LEN - 1 - i] + new_weight*s->pitchbuf[i]);
+            new_weight += new_step;
+            old_weight -= old_step;
+            if (old_weight < 0.0)
+                old_weight = 0.0;
+        }
+        s->pitch_offset = i;
+    }
+    else
+    {
+        gain = 1.0 - s->missing_samples*ATTENUATION_INCREMENT;
+        i = 0;
+    }
+    for (  ;  gain > 0.0  &&  i < len;  i++)
+    {
+        amp[i] = (pj_int16_t)(s->pitchbuf[s->pitch_offset]*gain);
+        gain = gain - ATTENUATION_INCREMENT;
+        if (++s->pitch_offset >= s->pitch)
+            s->pitch_offset = 0;
+    }
+    for (  ;  i < len;  i++)
+        amp[i] = 0;
+    s->missing_samples += orig_len;
+    save_history(s, amp, len);
+    return len;
+}
+/*- End of function --------------------------------------------------------*/
+
+plc_state_t *plc_init(plc_state_t *s)
+{
+    memset(s, 0, sizeof(*s));
+    return s;
+}
+/*- End of function --------------------------------------------------------*/
+
+
+/*
+ * PJMEDIA specifics
+ */
+#include <pj/assert.h>
+#include <pj/pool.h>
+#include <pj/log.h>
+
+#define THIS_FILE	"plc_steveu.c"
+
+struct steveu_plc
+{
+    plc_state_t	    state;
+    unsigned	    samples_per_frame;
+};
+
+void* pjmedia_plc_steveu_create(pj_pool_t *pool, unsigned c, unsigned f)
+{
+    struct steveu_plc *splc;
+
+    PJ_ASSERT_RETURN(c==8000, NULL);
+    PJ_UNUSED_ARG(c);
+
+    splc = pj_pool_alloc(pool, sizeof(struct steveu_plc));
+    plc_init(&splc->state);
+    splc->samples_per_frame = f;
+
+    return splc;
+}
+
+void  pjmedia_plc_steveu_save(void *obj, pj_int16_t *samples)
+{
+    struct steveu_plc *splc = obj;
+    plc_rx(&splc->state, samples, splc->samples_per_frame);
+}
+
+void  pjmedia_plc_steveu_generate(void *obj, pj_int16_t *samples)
+{
+    struct steveu_plc *splc = obj;
+    //PJ_LOG(5,(THIS_FILE, "PLC: generating lost frame"));
+    plc_fillin(&splc->state, samples, splc->samples_per_frame);
+}
+
+/*- End of file ------------------------------------------------------------*/
+
Index: pjproject/branches/split-3rd-party/third_party/plc_steveu/plc_steveu.h
===================================================================
--- pjproject/branches/split-3rd-party/third_party/plc_steveu/plc_steveu.h	(revision 1175)
+++ pjproject/branches/split-3rd-party/third_party/plc_steveu/plc_steveu.h	(revision 1175)
@@ -0,0 +1,153 @@
+/*! \file
+ * \brief SpanDSP - a series of DSP components for telephony
+ *
+ * plc.h
+ *
+ * \author Steve Underwood <steveu@coppice.org>
+ *
+ * Copyright (C) 2004 Steve Underwood
+ *
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * This version may be optionally licenced under the GNU LGPL licence.
+ *
+ * A license has been granted to Digium (via disclaimer) for the use of
+ * this code.
+ */
+
+
+#if !defined(_PLC_H_)
+#define _PLC_H_
+
+
+/*! \page plc_page Packet loss concealment
+\section plc_page_sec_1 What does it do?
+The packet loss concealment module provides a suitable synthetic fill-in signal,
+to minimise the audible effect of lost packets in VoIP applications. It is not
+tied to any particular codec, and could be used with almost any codec which does not
+specify its own procedure for packet loss concealment.
+
+Where a codec specific concealment procedure exists, the algorithm is usually built
+around knowledge of the characteristics of the particular codec. It will, therefore,
+generally give better results for that particular codec than this generic concealer will.
+
+\section plc_page_sec_2 How does it work?
+While good packets are being received, the plc_rx() routine keeps a record of the trailing
+section of the known speech signal. If a packet is missed, plc_fillin() is called to produce
+a synthetic replacement for the real speech signal. The average mean difference function
+(AMDF) is applied to the last known good signal, to determine its effective pitch.
+Based on this, the last pitch period of signal is saved. Essentially, this cycle of speech
+will be repeated over and over until the real speech resumes. However, several refinements
+are needed to obtain smooth pleasant sounding results.
+
+- The two ends of the stored cycle of speech will not always fit together smoothly. This can
+  cause roughness, or even clicks, at the joins between cycles. To soften this, the
+  1/4 pitch period of real speech preceeding the cycle to be repeated is blended with the last
+  1/4 pitch period of the cycle to be repeated, using an overlap-add (OLA) technique (i.e.
+  in total, the last 5/4 pitch periods of real speech are used).
+
+- The start of the synthetic speech will not always fit together smoothly with the tail of
+  real speech passed on before the erasure was identified. Ideally, we would like to modify
+  the last 1/4 pitch period of the real speech, to blend it into the synthetic speech. However,
+  it is too late for that. We could have delayed the real speech a little, but that would
+  require more buffer manipulation, and hurt the efficiency of the no-lost-packets case
+  (which we hope is the dominant case). Instead we use a degenerate form of OLA to modify
+  the start of the synthetic data. The last 1/4 pitch period of real speech is time reversed,
+  and OLA is used to blend it with the first 1/4 pitch period of synthetic speech. The result
+  seems quite acceptable.
+
+- As we progress into the erasure, the chances of the synthetic signal being anything like
+  correct steadily fall. Therefore, the volume of the synthesized signal is made to decay
+  linearly, such that after 50ms of missing audio it is reduced to silence.
+
+- When real speech resumes, an extra 1/4 pitch period of sythetic speech is blended with the
+  start of the real speech. If the erasure is small, this smoothes the transition. If the erasure
+  is long, and the synthetic signal has faded to zero, the blending softens the start up of the
+  real signal, avoiding a kind of "click" or "pop" effect that might occur with a sudden onset.
+
+\section plc_page_sec_3 How do I use it?
+Before audio is processed, call plc_init() to create an instance of the packet loss
+concealer. For each received audio packet that is acceptable (i.e. not including those being
+dropped for being too late) call plc_rx() to record the content of the packet. Note this may
+modify the packet a little after a period of packet loss, to blend real synthetic data smoothly.
+When a real packet is not available in time, call plc_fillin() to create a sythetic substitute.
+That's it!
+*/
+
+/*! Minimum allowed pitch (66 Hz) */
+#define PLC_PITCH_MIN           120
+/*! Maximum allowed pitch (200 Hz) */
+#define PLC_PITCH_MAX           40
+/*! Maximum pitch OLA window */
+#define PLC_PITCH_OVERLAP_MAX   (PLC_PITCH_MIN >> 2)
+/*! The length over which the AMDF function looks for similarity (20 ms) */
+#define CORRELATION_SPAN        160
+/*! History buffer length. The buffer much also be at leat 1.25 times
+    PLC_PITCH_MIN, but that is much smaller than the buffer needs to be for
+    the pitch assessment. */
+#define PLC_HISTORY_LEN         (CORRELATION_SPAN + PLC_PITCH_MIN)
+
+typedef struct
+{
+    /*! Consecutive erased samples */
+    int missing_samples;
+    /*! Current offset into pitch period */
+    int pitch_offset;
+    /*! Pitch estimate */
+    int pitch;
+    /*! Buffer for a cycle of speech */
+    float pitchbuf[PLC_PITCH_MIN];
+    /*! History buffer */
+    pj_int16_t history[PLC_HISTORY_LEN];
+    /*! Current pointer into the history buffer */
+    int buf_ptr;
+} plc_state_t;
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*! Process a block of received audio samples.
+    \brief Process a block of received audio samples.
+    \param s The packet loss concealer context.
+    \param amp The audio sample buffer.
+    \param len The number of samples in the buffer.
+    \return The number of samples in the buffer. */
+int plc_rx(plc_state_t *s, pj_int16_t amp[], int len);
+
+/*! Fill-in a block of missing audio samples.
+    \brief Fill-in a block of missing audio samples.
+    \param s The packet loss concealer context.
+    \param amp The audio sample buffer.
+    \param len The number of samples to be synthesised.
+    \return The number of samples synthesized. */
+int plc_fillin(plc_state_t *s, pj_int16_t amp[], int len);
+
+/*! Process a block of received V.29 modem audio samples.
+    \brief Process a block of received V.29 modem audio samples.
+    \param s The packet loss concealer context.
+    \return A pointer to the he packet loss concealer context. */
+plc_state_t *plc_init(plc_state_t *s);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/*- End of file ------------------------------------------------------------*/
+
Index: pjproject/branches/split-3rd-party/third_party/resample/largefilter.h
===================================================================
--- pjproject/branches/split-3rd-party/third_party/resample/largefilter.h	(revision 1175)
+++ pjproject/branches/split-3rd-party/third_party/resample/largefilter.h	(revision 1175)
@@ -0,0 +1,16391 @@
+/* Included by resamplesubs.c */
+#define LARGE_FILTER_NMULT ((RES_HWORD)65)
+#define LARGE_FILTER_SCALE 14746 /* Unity-gain scale factor */
+#define LARGE_FILTER_NWING 8192 /* Filter table length */
+static const RES_HWORD LARGE_FILTER_IMP[] /* Impulse response */ = {
+32767,
+32766,
+32764,
+32761,
+32756,
+32750,
+32743,
+32734,
+32724,
+32713,
+32700,
+32686,
+32671,
+32654,
+32636,
+32617,
+32596,
+32574,
+32551,
+32526,
+32500,
+32473,
+32445,
+32415,
+32383,
+32351,
+32317,
+32282,
+32246,
+32208,
+32169,
+32129,
+32087,
+32044,
+32000,
+31955,
+31908,
+31860,
+31811,
+31760,
+31708,
+31655,
+31601,
+31545,
+31489,
+31431,
+31371,
+31311,
+31249,
+31186,
+31122,
+31056,
+30990,
+30922,
+30853,
+30783,
+30711,
+30639,
+30565,
+30490,
+30414,
+30337,
+30258,
+30179,
+30098,
+30016,
+29933,
+29849,
+29764,
+29677,
+29590,
+29501,
+29411,
+29321,
+29229,
+29136,
+29042,
+28947,
+28851,
+28753,
+28655,
+28556,
+28456,
+28354,
+28252,
+28149,
+28044,
+27939,
+27833,
+27725,
+27617,
+27508,
+27398,
+27287,
+27175,
+27062,
+26948,
+26833,
+26717,
+26601,
+26483,
+26365,
+26246,
+26125,
+26005,
+25883,
+25760,
+25637,
+25512,
+25387,
+25261,
+25135,
+25007,
+24879,
+24750,
+24620,
+24490,
+24358,
+24226,
+24094,
+23960,
+23826,
+23691,
+23556,
+23420,
+23283,
+23146,
+23008,
+22869,
+22730,
+22590,
+22449,
+22308,
+22166,
+22024,
+21881,
+21738,
+21594,
+21449,
+21304,
+21159,
+21013,
+20866,
+20719,
+20572,
+20424,
+20275,
+20127,
+19977,
+19828,
+19678,
+19527,
+19376,
+19225,
+19073,
+18921,
+18769,
+18616,
+18463,
+18310,
+18157,
+18003,
+17849,
+17694,
+17539,
+17384,
+17229,
+17074,
+16918,
+16762,
+16606,
+16450,
+16294,
+16137,
+15980,
+15823,
+15666,
+15509,
+15352,
+15195,
+15037,
+14880,
+14722,
+14564,
+14407,
+14249,
+14091,
+13933,
+13775,
+13618,
+13460,
+13302,
+13144,
+12987,
+12829,
+12671,
+12514,
+12356,
+12199,
+12042,
+11885,
+11728,
+11571,
+11414,
+11257,
+11101,
+10945,
+10789,
+10633,
+10477,
+10322,
+10167,
+10012,
+9857,
+9702,
+9548,
+9394,
+9241,
+9087,
+8934,
+8781,
+8629,
+8477,
+8325,
+8174,
+8023,
+7872,
+7722,
+7572,
+7422,
+7273,
+7124,
+6976,
+6828,
+6681,
+6534,
+6387,
+6241,
+6096,
+5951,
+5806,
+5662,
+5518,
+5375,
+5233,
+5091,
+4949,
+4808,
+4668,
+4528,
+4389,
+4250,
+4112,
+3975,
+3838,
+3702,
+3566,
+3431,
+3297,
+3163,
+3030,
+2898,
+2766,
+2635,
+2505,
+2375,
+2246,
+2118,
+1990,
+1864,
+1738,
+1612,
+1487,
+1364,
+1240,
+1118,
+996,
+875,
+755,
+636,
+517,
+400,
+283,
+166,
+51,
+-63,
+-176,
+-289,
+-401,
+-513,
+-623,
+-733,
+-841,
+-949,
+-1056,
+-1162,
+-1268,
+-1372,
+-1476,
+-1578,
+-1680,
+-1781,
+-1881,
+-1980,
+-2078,
+-2176,
+-2272,
+-2367,
+-2462,
+-2556,
+-2648,
+-2740,
+-2831,
+-2921,
+-3010,
+-3098,
+-3185,
+-3271,
+-3356,
+-3441,
+-3524,
+-3606,
+-3688,
+-3768,
+-3848,
+-3926,
+-4004,
+-4080,
+-4156,
+-4231,
+-4304,
+-4377,
+-4449,
+-4519,
+-4589,
+-4658,
+-4726,
+-4792,
+-4858,
+-4923,
+-4987,
+-5050,
+-5111,
+-5172,
+-5232,
+-5291,
+-5349,
+-5406,
+-5462,
+-5517,
+-5571,
+-5624,
+-5675,
+-5726,
+-5776,
+-5825,
+-5873,
+-5920,
+-5966,
+-6011,
+-6055,
+-6098,
+-6140,
+-6181,
+-6222,
+-6261,
+-6299,
+-6336,
+-6372,
+-6407,
+-6441,
+-6475,
+-6507,
+-6538,
+-6569,
+-6598,
+-6626,
+-6654,
+-6680,
+-6706,
+-6730,
+-6754,
+-6777,
+-6798,
+-6819,
+-6839,
+-6858,
+-6876,
+-6893,
+-6909,
+-6924,
+-6938,
+-6951,
+-6964,
+-6975,
+-6986,
+-6995,
+-7004,
+-7012,
+-7019,
+-7025,
+-7030,
+-7035,
+-7038,
+-7040,
+-7042,
+-7043,
+-7043,
+-7042,
+-7040,
+-7038,
+-7034,
+-7030,
+-7025,
+-7019,
+-7012,
+-7004,
+-6996,
+-6986,
+-6976,
+-6965,
+-6954,
+-6941,
+-6928,
+-6914,
+-6899,
+-6884,
+-6867,
+-6850,
+-6832,
+-6814,
+-6794,
+-6774,
+-6753,
+-6732,
+-6709,
+-6686,
+-6663,
+-6638,
+-6613,
+-6587,
+-6561,
+-6534,
+-6506,
+-6478,
+-6448,
+-6419,
+-6388,
+-6357,
+-6325,
+-6293,
+-6260,
+-6226,
+-6192,
+-6157,
+-6122,
+-6086,
+-6049,
+-6012,
+-5975,
+-5936,
+-5897,
+-5858,
+-5818,
+-5778,
+-5737,
+-5695,
+-5653,
+-5611,
+-5568,
+-5524,
+-5480,
+-5436,
+-5391,
+-5345,
+-5300,
+-5253,
+-5207,
+-5159,
+-5112,
+-5064,
+-5015,
+-4966,
+-4917,
+-4868,
+-4818,
+-4767,
+-4716,
+-4665,
+-4614,
+-4562,
+-4510,
+-4457,
+-4404,
+-4351,
+-4298,
+-4244,
+-4190,
+-4136,
+-4081,
+-4026,
+-3971,
+-3916,
+-3860,
+-3804,
+-3748,
+-3692,
+-3635,
+-3578,
+-3521,
+-3464,
+-3406,
+-3349,
+-3291,
+-3233,
+-3175,
+-3117,
+-3058,
+-3000,
+-2941,
+-2882,
+-2823,
+-2764,
+-2705,
+-2646,
+-2587,
+-2527,
+-2468,
+-2408,
+-2349,
+-2289,
+-2229,
+-2169,
+-2110,
+-2050,
+-1990,
+-1930,
+-1870,
+-1811,
+-1751,
+-1691,
+-1631,
+-1571,
+-1512,
+-1452,
+-1392,
+-1333,
+-1273,
+-1214,
+-1154,
+-1095,
+-1036,
+-977,
+-918,
+-859,
+-800,
+-741,
+-683,
+-624,
+-566,
+-508,
+-450,
+-392,
+-335,
+-277,
+-220,
+-163,
+-106,
+-49,
+6,
+63,
+119,
+175,
+230,
+286,
+341,
+396,
+450,
+505,
+559,
+613,
+667,
+720,
+773,
+826,
+878,
+931,
+983,
+1034,
+1086,
+1137,
+1187,
+1238,
+1288,
+1337,
+1387,
+1436,
+1484,
+1533,
+1581,
+1628,
+1675,
+1722,
+1769,
+1815,
+1861,
+1906,
+1951,
+1996,
+2040,
+2084,
+2127,
+2170,
+2212,
+2255,
+2296,
+2338,
+2378,
+2419,
+2459,
+2498,
+2538,
+2576,
+2615,
+2652,
+2690,
+2727,
+2763,
+2799,
+2834,
+2870,
+2904,
+2938,
+2972,
+3005,
+3038,
+3070,
+3102,
+3133,
+3164,
+3194,
+3224,
+3253,
+3282,
+3310,
+3338,
+3365,
+3392,
+3418,
+3444,
+3469,
+3494,
+3518,
+3542,
+3566,
+3588,
+3611,
+3632,
+3653,
+3674,
+3694,
+3714,
+3733,
+3752,
+3770,
+3788,
+3805,
+3821,
+3837,
+3853,
+3868,
+3882,
+3896,
+3910,
+3923,
+3935,
+3947,
+3958,
+3969,
+3980,
+3989,
+3999,
+4007,
+4016,
+4023,
+4031,
+4037,
+4044,
+4049,
+4054,
+4059,
+4063,
+4067,
+4070,
+4073,
+4075,
+4076,
+4077,
+4078,
+4078,
+4078,
+4077,
+4076,
+4074,
+4071,
+4068,
+4065,
+4061,
+4057,
+4052,
+4047,
+4041,
+4035,
+4028,
+4021,
+4013,
+4005,
+3997,
+3988,
+3978,
+3968,
+3958,
+3947,
+3936,
+3924,
+3912,
+3899,
+3886,
+3872,
+3858,
+3844,
+3829,
+3814,
+3798,
+3782,
+3766,
+3749,
+3731,
+3714,
+3696,
+3677,
+3658,
+3639,
+3619,
+3599,
+3578,
+3558,
+3536,
+3515,
+3493,
+3470,
+3448,
+3425,
+3401,
+3378,
+3353,
+3329,
+3304,
+3279,
+3254,
+3228,
+3202,
+3175,
+3149,
+3122,
+3094,
+3067,
+3039,
+3011,
+2982,
+2953,
+2924,
+2895,
+2865,
+2835,
+2805,
+2775,
+2744,
+2713,
+2682,
+2651,
+2619,
+2587,
+2555,
+2523,
+2490,
+2457,
+2424,
+2391,
+2358,
+2324,
+2290,
+2256,
+2222,
+2188,
+2153,
+2119,
+2084,
+2049,
+2014,
+1978,
+1943,
+1907,
+1872,
+1836,
+1800,
+1764,
+1727,
+1691,
+1655,
+1618,
+1581,
+1545,
+1508,
+1471,
+1434,
+1397,
+1360,
+1322,
+1285,
+1248,
+1210,
+1173,
+1135,
+1098,
+1060,
+1023,
+985,
+947,
+910,
+872,
+834,
+797,
+759,
+721,
+684,
+646,
+608,
+571,
+533,
+496,
+458,
+421,
+383,
+346,
+308,
+271,
+234,
+197,
+160,
+123,
+86,
+49,
+12,
+-23,
+-60,
+-96,
+-133,
+-169,
+-205,
+-241,
+-277,
+-313,
+-348,
+-384,
+-419,
+-455,
+-490,
+-525,
+-559,
+-594,
+-628,
+-663,
+-697,
+-731,
+-765,
+-798,
+-832,
+-865,
+-898,
+-931,
+-963,
+-996,
+-1028,
+-1060,
+-1092,
+-1124,
+-1155,
+-1186,
+-1217,
+-1248,
+-1279,
+-1309,
+-1339,
+-1369,
+-1398,
+-1428,
+-1457,
+-1486,
+-1514,
+-1542,
+-1571,
+-1598,
+-1626,
+-1653,
+-1680,
+-1707,
+-1733,
+-1760,
+-1785,
+-1811,
+-1836,
+-1862,
+-1886,
+-1911,
+-1935,
+-1959,
+-1982,
+-2006,
+-2029,
+-2051,
+-2074,
+-2096,
+-2118,
+-2139,
+-2160,
+-2181,
+-2202,
+-2222,
+-2242,
+-2261,
+-2280,
+-2299,
+-2318,
+-2336,
+-2354,
+-2372,
+-2389,
+-2406,
+-2423,
+-2439,
+-2455,
+-2470,
+-2486,
+-2500,
+-2515,
+-2529,
+-2543,
+-2557,
+-2570,
+-2583,
+-2595,
+-2607,
+-2619,
+-2631,
+-2642,
+-2652,
+-2663,
+-2673,
+-2683,
+-2692,
+-2701,
+-2710,
+-2718,
+-2726,
+-2734,
+-2741,
+-2748,
+-2754,
+-2760,
+-2766,
+-2772,
+-2777,
+-2782,
+-2786,
+-2790,
+-2794,
+-2797,
+-2800,
+-2803,
+-2805,
+-2807,
+-2809,
+-2810,
+-2811,
+-2812,
+-2812,
+-2812,
+-2812,
+-2811,
+-2810,
+-2808,
+-2807,
+-2804,
+-2802,
+-2799,
+-2796,
+-2792,
+-2789,
+-2785,
+-2780,
+-2775,
+-2770,
+-2765,
+-2759,
+-2753,
+-2746,
+-2740,
+-2732,
+-2725,
+-2717,
+-2709,
+-2701,
+-2692,
+-2683,
+-2674,
+-2664,
+-2655,
+-2644,
+-2634,
+-2623,
+-2612,
+-2601,
+-2589,
+-2577,
+-2565,
+-2552,
+-2539,
+-2526,
+-2513,
+-2499,
+-2485,
+-2471,
+-2457,
+-2442,
+-2427,
+-2412,
+-2396,
+-2380,
+-2364,
+-2348,
+-2331,
+-2315,
+-2297,
+-2280,
+-2263,
+-2245,
+-2227,
+-2209,
+-2190,
+-2171,
+-2152,
+-2133,
+-2114,
+-2094,
+-2075,
+-2055,
+-2034,
+-2014,
+-1993,
+-1972,
+-1951,
+-1930,
+-1909,
+-1887,
+-1865,
+-1843,
+-1821,
+-1799,
+-1776,
+-1754,
+-1731,
+-1708,
+-1685,
+-1662,
+-1638,
+-1614,
+-1591,
+-1567,
+-1543,
+-1519,
+-1494,
+-1470,
+-1445,
+-1421,
+-1396,
+-1371,
+-1346,
+-1321,
+-1295,
+-1270,
+-1244,
+-1219,
+-1193,
+-1167,
+-1142,
+-1116,
+-1090,
+-1064,
+-1037,
+-1011,
+-985,
+-958,
+-932,
+-905,
+-879,
+-852,
+-826,
+-799,
+-772,
+-745,
+-719,
+-692,
+-665,
+-638,
+-611,
+-584,
+-557,
+-530,
+-503,
+-476,
+-449,
+-422,
+-395,
+-368,
+-341,
+-314,
+-287,
+-260,
+-234,
+-207,
+-180,
+-153,
+-126,
+-100,
+-73,
+-46,
+-20,
+6,
+32,
+59,
+85,
+111,
+138,
+164,
+190,
+216,
+242,
+268,
+294,
+319,
+345,
+370,
+396,
+421,
+446,
+471,
+496,
+521,
+546,
+571,
+595,
+619,
+644,
+668,
+692,
+716,
+739,
+763,
+787,
+810,
+833,
+856,
+879,
+902,
+924,
+947,
+969,
+991,
+1013,
+1035,
+1056,
+1078,
+1099,
+1120,
+1141,
+1162,
+1182,
+1202,
+1223,
+1243,
+1262,
+1282,
+1301,
+1320,
+1339,
+1358,
+1377,
+1395,
+1413,
+1431,
+1449,
+1467,
+1484,
+1501,
+1518,
+1535,
+1551,
+1567,
+1583,
+1599,
+1615,
+1630,
+1645,
+1660,
+1674,
+1689,
+1703,
+1717,
+1731,
+1744,
+1757,
+1770,
+1783,
+1795,
+1808,
+1820,
+1831,
+1843,
+1854,
+1865,
+1876,
+1886,
+1897,
+1907,
+1916,
+1926,
+1935,
+1944,
+1953,
+1961,
+1970,
+1978,
+1985,
+1993,
+2000,
+2007,
+2014,
+2020,
+2026,
+2032,
+2038,
+2043,
+2048,
+2053,
+2058,
+2062,
+2066,
+2070,
+2073,
+2077,
+2080,
+2083,
+2085,
+2087,
+2089,
+2091,
+2093,
+2094,
+2095,
+2095,
+2096,
+2096,
+2096,
+2096,
+2095,
+2094,
+2093,
+2092,
+2090,
+2088,
+2086,
+2084,
+2081,
+2079,
+2075,
+2072,
+2069,
+2065,
+2061,
+2056,
+2052,
+2047,
+2042,
+2037,
+2031,
+2025,
+2019,
+2013,
+2006,
+2000,
+1993,
+1986,
+1978,
+1971,
+1963,
+1955,
+1946,
+1938,
+1929,
+1920,
+1911,
+1901,
+1892,
+1882,
+1872,
+1862,
+1851,
+1841,
+1830,
+1819,
+1807,
+1796,
+1784,
+1772,
+1760,
+1748,
+1735,
+1723,
+1710,
+1697,
+1684,
+1670,
+1657,
+1643,
+1629,
+1615,
+1601,
+1586,
+1572,
+1557,
+1542,
+1527,
+1512,
+1496,
+1481,
+1465,
+1449,
+1433,
+1417,
+1401,
+1384,
+1368,
+1351,
+1334,
+1317,
+1300,
+1283,
+1265,
+1248,
+1230,
+1212,
+1195,
+1177,
+1159,
+1140,
+1122,
+1104,
+1085,
+1067,
+1048,
+1029,
+1010,
+991,
+972,
+953,
+934,
+915,
+895,
+876,
+856,
+837,
+817,
+797,
+777,
+758,
+738,
+718,
+698,
+678,
+658,
+637,
+617,
+597,
+577,
+556,
+536,
+516,
+495,
+475,
+454,
+434,
+414,
+393,
+373,
+352,
+332,
+311,
+291,
+270,
+250,
+229,
+208,
+188,
+168,
+147,
+127,
+106,
+86,
+65,
+45,
+25,
+5,
+-15,
+-35,
+-55,
+-75,
+-95,
+-115,
+-135,
+-155,
+-175,
+-195,
+-215,
+-234,
+-254,
+-274,
+-293,
+-313,
+-332,
+-351,
+-370,
+-390,
+-409,
+-428,
+-446,
+-465,
+-484,
+-503,
+-521,
+-539,
+-558,
+-576,
+-594,
+-612,
+-630,
+-648,
+-666,
+-683,
+-701,
+-718,
+-735,
+-752,
+-769,
+-786,
+-803,
+-819,
+-836,
+-852,
+-868,
+-885,
+-900,
+-916,
+-932,
+-947,
+-963,
+-978,
+-993,
+-1008,
+-1023,
+-1038,
+-1052,
+-1066,
+-1081,
+-1095,
+-1108,
+-1122,
+-1136,
+-1149,
+-1162,
+-1175,
+-1188,
+-1201,
+-1214,
+-1226,
+-1238,
+-1250,
+-1262,
+-1274,
+-1285,
+-1297,
+-1308,
+-1319,
+-1330,
+-1340,
+-1351,
+-1361,
+-1371,
+-1381,
+-1390,
+-1400,
+-1409,
+-1418,
+-1427,
+-1436,
+-1445,
+-1453,
+-1461,
+-1469,
+-1477,
+-1485,
+-1492,
+-1499,
+-1506,
+-1513,
+-1520,
+-1526,
+-1532,
+-1538,
+-1544,
+-1550,
+-1555,
+-1560,
+-1566,
+-1570,
+-1575,
+-1579,
+-1584,
+-1588,
+-1592,
+-1595,
+-1599,
+-1602,
+-1605,
+-1608,
+-1610,
+-1613,
+-1615,
+-1617,
+-1619,
+-1620,
+-1622,
+-1623,
+-1624,
+-1625,
+-1625,
+-1626,
+-1626,
+-1626,
+-1626,
+-1625,
+-1625,
+-1624,
+-1623,
+-1622,
+-1621,
+-1619,
+-1617,
+-1615,
+-1613,
+-1611,
+-1608,
+-1605,
+-1603,
+-1599,
+-1596,
+-1593,
+-1589,
+-1585,
+-1581,
+-1577,
+-1572,
+-1568,
+-1563,
+-1558,
+-1553,
+-1547,
+-1542,
+-1536,
+-1530,
+-1524,
+-1518,
+-1511,
+-1505,
+-1498,
+-1491,
+-1484,
+-1477,
+-1469,
+-1462,
+-1454,
+-1446,
+-1438,
+-1430,
+-1421,
+-1413,
+-1404,
+-1395,
+-1386,
+-1377,
+-1367,
+-1358,
+-1348,
+-1338,
+-1328,
+-1318,
+-1308,
+-1297,
+-1287,
+-1276,
+-1265,
+-1254,
+-1243,
+-1232,
+-1221,
+-1209,
+-1198,
+-1186,
+-1174,
+-1162,
+-1150,
+-1138,
+-1125,
+-1113,
+-1100,
+-1087,
+-1075,
+-1062,
+-1049,
+-1035,
+-1022,
+-1009,
+-995,
+-982,
+-968,
+-954,
+-941,
+-927,
+-913,
+-898,
+-884,
+-870,
+-856,
+-841,
+-827,
+-812,
+-797,
+-783,
+-768,
+-753,
+-738,
+-723,
+-708,
+-692,
+-677,
+-662,
+-647,
+-631,
+-616,
+-600,
+-585,
+-569,
+-554,
+-538,
+-522,
+-506,
+-491,
+-475,
+-459,
+-443,
+-427,
+-411,
+-395,
+-379,
+-363,
+-347,
+-331,
+-315,
+-299,
+-283,
+-267,
+-251,
+-235,
+-218,
+-202,
+-186,
+-170,
+-154,
+-138,
+-122,
+-106,
+-90,
+-74,
+-58,
+-42,
+-26,
+-10,
+5,
+21,
+37,
+53,
+69,
+85,
+100,
+116,
+132,
+147,
+163,
+179,
+194,
+209,
+225,
+240,
+256,
+271,
+286,
+301,
+316,
+331,
+346,
+361,
+376,
+391,
+405,
+420,
+434,
+449,
+463,
+477,
+492,
+506,
+520,
+534,
+548,
+561,
+575,
+589,
+602,
+615,
+629,
+642,
+655,
+668,
+681,
+694,
+706,
+719,
+731,
+744,
+756,
+768,
+780,
+792,
+804,
+816,
+827,
+839,
+850,
+861,
+872,
+883,
+894,
+905,
+915,
+926,
+936,
+946,
+956,
+966,
+976,
+986,
+995,
+1005,
+1014,
+1023,
+1032,
+1041,
+1049,
+1058,
+1066,
+1075,
+1083,
+1091,
+1099,
+1106,
+1114,
+1121,
+1128,
+1135,
+1142,
+1149,
+1156,
+1162,
+1169,
+1175,
+1181,
+1187,
+1192,
+1198,
+1203,
+1208,
+1214,
+1218,
+1223,
+1228,
+1232,
+1237,
+1241,
+1245,
+1249,
+1252,
+1256,
+1259,
+1262,
+1265,
+1268,
+1271,
+1273,
+1276,
+1278,
+1280,
+1282,
+1284,
+1285,
+1287,
+1288,
+1289,
+1290,
+1291,
+1292,
+1292,
+1292,
+1293,
+1293,
+1292,
+1292,
+1292,
+1291,
+1290,
+1289,
+1288,
+1287,
+1285,
+1284,
+1282,
+1280,
+1278,
+1276,
+1274,
+1271,
+1269,
+1266,
+1263,
+1260,
+1257,
+1253,
+1250,
+1246,
+1242,
+1238,
+1234,
+1230,
+1225,
+1221,
+1216,
+1211,
+1206,
+1201,
+1196,
+1190,
+1185,
+1179,
+1173,
+1167,
+1161,
+1155,
+1149,
+1142,
+1136,
+1129,
+1122,
+1115,
+1108,
+1101,
+1094,
+1086,
+1078,
+1071,
+1063,
+1055,
+1047,
+1039,
+1030,
+1022,
+1013,
+1005,
+996,
+987,
+978,
+969,
+960,
+951,
+941,
+932,
+922,
+913,
+903,
+893,
+883,
+873,
+863,
+853,
+842,
+832,
+821,
+811,
+800,
+789,
+778,
+768,
+757,
+746,
+734,
+723,
+712,
+701,
+689,
+678,
+666,
+654,
+643,
+631,
+619,
+607,
+596,
+584,
+572,
+559,
+547,
+535,
+523,
+511,
+498,
+486,
+474,
+461,
+449,
+436,
+424,
+411,
+399,
+386,
+373,
+361,
+348,
+335,
+322,
+310,
+297,
+284,
+271,
+258,
+246,
+233,
+220,
+207,
+194,
+181,
+168,
+156,
+143,
+130,
+117,
+104,
+91,
+78,
+65,
+53,
+40,
+27,
+14,
+1,
+-10,
+-23,
+-36,
+-48,
+-61,
+-74,
+-86,
+-99,
+-111,
+-124,
+-136,
+-149,
+-161,
+-174,
+-186,
+-198,
+-211,
+-223,
+-235,
+-247,
+-259,
+-271,
+-283,
+-295,
+-307,
+-319,
+-330,
+-342,
+-354,
+-365,
+-377,
+-388,
+-399,
+-411,
+-422,
+-433,
+-444,
+-455,
+-466,
+-477,
+-488,
+-499,
+-509,
+-520,
+-530,
+-541,
+-551,
+-561,
+-571,
+-581,
+-591,
+-601,
+-611,
+-621,
+-631,
+-640,
+-650,
+-659,
+-668,
+-677,
+-686,
+-695,
+-704,
+-713,
+-722,
+-730,
+-739,
+-747,
+-755,
+-763,
+-771,
+-779,
+-787,
+-795,
+-803,
+-810,
+-817,
+-825,
+-832,
+-839,
+-846,
+-853,
+-859,
+-866,
+-873,
+-879,
+-885,
+-891,
+-897,
+-903,
+-909,
+-915,
+-920,
+-926,
+-931,
+-936,
+-941,
+-946,
+-951,
+-955,
+-960,
+-964,
+-969,
+-973,
+-977,
+-981,
+-985,
+-988,
+-992,
+-995,
+-999,
+-1002,
+-1005,
+-1008,
+-1011,
+-1013,
+-1016,
+-1018,
+-1020,
+-1023,
+-1025,
+-1026,
+-1028,
+-1030,
+-1031,
+-1033,
+-1034,
+-1035,
+-1036,
+-1037,
+-1038,
+-1038,
+-1039,
+-1039,
+-1039,
+-1039,
+-1039,
+-1039,
+-1039,
+-1038,
+-1038,
+-1037,
+-1036,
+-1036,
+-1034,
+-1033,
+-1032,
+-1031,
+-1029,
+-1027,
+-1026,
+-1024,
+-1022,
+-1019,
+-1017,
+-1015,
+-1012,
+-1010,
+-1007,
+-1004,
+-1001,
+-998,
+-995,
+-991,
+-988,
+-984,
+-980,
+-977,
+-973,
+-969,
+-965,
+-960,
+-956,
+-951,
+-947,
+-942,
+-937,
+-932,
+-927,
+-922,
+-917,
+-912,
+-906,
+-901,
+-895,
+-889,
+-883,
+-877,
+-871,
+-865,
+-859,
+-853,
+-846,
+-840,
+-833,
+-826,
+-819,
+-812,
+-805,
+-798,
+-791,
+-784,
+-777,
+-769,
+-762,
+-754,
+-746,
+-739,
+-731,
+-723,
+-715,
+-707,
+-699,
+-691,
+-682,
+-674,
+-665,
+-657,
+-648,
+-640,
+-631,
+-622,
+-614,
+-605,
+-596,
+-587,
+-578,
+-569,
+-559,
+-550,
+-541,
+-532,
+-522,
+-513,
+-503,
+-494,
+-484,
+-474,
+-465,
+-455,
+-445,
+-436,
+-426,
+-416,
+-406,
+-396,
+-386,
+-376,
+-366,
+-356,
+-346,
+-336,
+-325,
+-315,
+-305,
+-295,
+-285,
+-274,
+-264,
+-254,
+-243,
+-233,
+-223,
+-212,
+-202,
+-192,
+-181,
+-171,
+-161,
+-150,
+-140,
+-129,
+-119,
+-108,
+-98,
+-88,
+-77,
+-67,
+-57,
+-46,
+-36,
+-25,
+-15,
+-5,
+5,
+15,
+25,
+35,
+46,
+56,
+66,
+76,
+86,
+97,
+107,
+117,
+127,
+137,
+147,
+157,
+167,
+177,
+186,
+196,
+206,
+216,
+225,
+235,
+245,
+254,
+264,
+273,
+283,
+292,
+301,
+311,
+320,
+329,
+338,
+347,
+356,
+365,
+374,
+383,
+392,
+400,
+409,
+418,
+426,
+435,
+443,
+451,
+460,
+468,
+476,
+484,
+492,
+500,
+508,
+515,
+523,
+531,
+538,
+546,
+553,
+560,
+568,
+575,
+582,
+589,
+596,
+602,
+609,
+616,
+622,
+629,
+635,
+642,
+648,
+654,
+660,
+666,
+672,
+678,
+683,
+689,
+694,
+700,
+705,
+710,
+715,
+720,
+725,
+730,
+735,
+739,
+744,
+748,
+753,
+757,
+761,
+765,
+769,
+773,
+777,
+780,
+784,
+787,
+791,
+794,
+797,
+800,
+803,
+806,
+809,
+811,
+814,
+816,
+818,
+821,
+823,
+825,
+827,
+828,
+830,
+832,
+833,
+835,
+836,
+837,
+838,
+839,
+840,
+841,
+841,
+842,
+842,
+843,
+843,
+843,
+843,
+843,
+843,
+843,
+842,
+842,
+841,
+840,
+840,
+839,
+838,
+837,
+835,
+834,
+833,
+831,
+830,
+828,
+826,
+824,
+822,
+820,
+818,
+816,
+813,
+811,
+808,
+806,
+803,
+800,
+797,
+794,
+791,
+788,
+784,
+781,
+777,
+774,
+770,
+766,
+763,
+759,
+755,
+750,
+746,
+742,
+738,
+733,
+729,
+724,
+719,
+714,
+710,
+705,
+700,
+694,
+689,
+684,
+679,
+673,
+668,
+662,
+657,
+651,
+645,
+639,
+633,
+627,
+621,
+615,
+609,
+603,
+596,
+590,
+584,
+577,
+571,
+564,
+557,
+551,
+544,
+537,
+530,
+523,
+516,
+509,
+502,
+495,
+487,
+480,
+473,
+465,
+458,
+450,
+443,
+435,
+428,
+420,
+413,
+405,
+397,
+389,
+381,
+374,
+366,
+358,
+350,
+342,
+334,
+326,
+318,
+310,
+301,
+293,
+285,
+277,
+269,
+260,
+252,
+244,
+236,
+227,
+219,
+211,
+202,
+194,
+185,
+177,
+169,
+160,
+152,
+143,
+135,
+126,
+118,
+110,
+101,
+93,
+84,
+76,
+67,
+59,
+50,
+42,
+34,
+25,
+17,
+8,
+0,
+-7,
+-16,
+-24,
+-32,
+-41,
+-49,
+-57,
+-66,
+-74,
+-82,
+-90,
+-98,
+-106,
+-115,
+-123,
+-131,
+-139,
+-147,
+-155,
+-163,
+-171,
+-179,
+-186,
+-194,
+-202,
+-210,
+-217,
+-225,
+-233,
+-240,
+-248,
+-255,
+-263,
+-270,
+-278,
+-285,
+-292,
+-299,
+-307,
+-314,
+-321,
+-328,
+-335,
+-342,
+-349,
+-356,
+-362,
+-369,
+-376,
+-382,
+-389,
+-396,
+-402,
+-408,
+-415,
+-421,
+-427,
+-433,
+-439,
+-445,
+-451,
+-457,
+-463,
+-469,
+-475,
+-480,
+-486,
+-491,
+-497,
+-502,
+-507,
+-513,
+-518,
+-523,
+-528,
+-533,
+-538,
+-542,
+-547,
+-552,
+-556,
+-561,
+-565,
+-570,
+-574,
+-578,
+-582,
+-586,
+-590,
+-594,
+-598,
+-602,
+-605,
+-609,
+-612,
+-616,
+-619,
+-622,
+-625,
+-629,
+-632,
+-634,
+-637,
+-640,
+-643,
+-645,
+-648,
+-650,
+-653,
+-655,
+-657,
+-659,
+-661,
+-663,
+-665,
+-667,
+-668,
+-670,
+-671,
+-673,
+-674,
+-675,
+-676,
+-678,
+-679,
+-679,
+-680,
+-681,
+-682,
+-682,
+-683,
+-683,
+-683,
+-684,
+-684,
+-684,
+-684,
+-684,
+-684,
+-683,
+-683,
+-682,
+-682,
+-681,
+-681,
+-680,
+-679,
+-678,
+-677,
+-676,
+-675,
+-674,
+-672,
+-671,
+-669,
+-668,
+-666,
+-664,
+-662,
+-661,
+-659,
+-657,
+-654,
+-652,
+-650,
+-648,
+-645,
+-643,
+-640,
+-637,
+-635,
+-632,
+-629,
+-626,
+-623,
+-620,
+-617,
+-613,
+-610,
+-607,
+-603,
+-600,
+-596,
+-593,
+-589,
+-585,
+-581,
+-577,
+-573,
+-569,
+-565,
+-561,
+-557,
+-552,
+-548,
+-544,
+-539,
+-534,
+-530,
+-525,
+-520,
+-516,
+-511,
+-506,
+-501,
+-496,
+-491,
+-486,
+-481,
+-475,
+-470,
+-465,
+-460,
+-454,
+-449,
+-443,
+-438,
+-432,
+-426,
+-421,
+-415,
+-409,
+-403,
+-398,
+-392,
+-386,
+-380,
+-374,
+-368,
+-362,
+-355,
+-349,
+-343,
+-337,
+-331,
+-324,
+-318,
+-312,
+-305,
+-299,
+-292,
+-286,
+-280,
+-273,
+-266,
+-260,
+-253,
+-247,
+-240,
+-234,
+-227,
+-220,
+-213,
+-207,
+-200,
+-193,
+-187,
+-180,
+-173,
+-166,
+-159,
+-153,
+-146,
+-139,
+-132,
+-125,
+-118,
+-112,
+-105,
+-98,
+-91,
+-84,
+-77,
+-70,
+-64,
+-57,
+-50,
+-43,
+-36,
+-29,
+-22,
+-16,
+-9,
+-2,
+4,
+11,
+17,
+24,
+31,
+38,
+44,
+51,
+58,
+64,
+71,
+78,
+84,
+91,
+98,
+104,
+111,
+117,
+124,
+130,
+137,
+143,
+149,
+156,
+162,
+168,
+175,
+181,
+187,
+193,
+199,
+205,
+212,
+218,
+224,
+230,
+236,
+241,
+247,
+253,
+259,
+265,
+270,
+276,
+282,
+287,
+293,
+298,
+304,
+309,
+314,
+320,
+325,
+330,
+335,
+340,
+345,
+350,
+355,
+360,
+365,
+370,
+375,
+380,
+384,
+389,
+393,
+398,
+402,
+407,
+411,
+415,
+419,
+424,
+428,
+432,
+436,
+440,
+443,
+447,
+451,
+455,
+458,
+462,
+465,
+469,
+472,
+475,
+479,
+482,
+485,
+488,
+491,
+494,
+497,
+499,
+502,
+505,
+507,
+510,
+512,
+515,
+517,
+519,
+522,
+524,
+526,
+528,
+530,
+532,
+533,
+535,
+537,
+538,
+540,
+541,
+543,
+544,
+545,
+546,
+548,
+549,
+550,
+550,
+551,
+552,
+553,
+553,
+554,
+554,
+555,
+555,
+555,
+556,
+556,
+556,
+556,
+556,
+556,
+555,
+555,
+555,
+554,
+554,
+553,
+553,
+552,
+551,
+551,
+550,
+549,
+548,
+547,
+546,
+545,
+543,
+542,
+541,
+539,
+538,
+536,
+534,
+533,
+531,
+529,
+527,
+525,
+523,
+521,
+519,
+517,
+514,
+512,
+510,
+507,
+505,
+502,
+500,
+497,
+494,
+492,
+489,
+486,
+483,
+480,
+477,
+474,
+471,
+467,
+464,
+461,
+457,
+454,
+450,
+447,
+443,
+440,
+436,
+432,
+429,
+425,
+421,
+417,
+413,
+409,
+405,
+401,
+397,
+393,
+388,
+384,
+380,
+375,
+371,
+367,
+362,
+358,
+353,
+349,
+344,
+339,
+335,
+330,
+325,
+321,
+316,
+311,
+306,
+301,
+296,
+291,
+286,
+281,
+276,
+271,
+266,
+261,
+256,
+251,
+245,
+240,
+235,
+230,
+225,
+219,
+214,
+209,
+203,
+198,
+193,
+187,
+182,
+176,
+171,
+165,
+160,
+154,
+149,
+144,
+138,
+132,
+127,
+121,
+116,
+110,
+105,
+99,
+94,
+88,
+83,
+77,
+71,
+66,
+60,
+55,
+49,
+44,
+38,
+33,
+27,
+21,
+16,
+10,
+5,
+0,
+-5,
+-11,
+-16,
+-22,
+-27,
+-33,
+-38,
+-43,
+-49,
+-54,
+-60,
+-65,
+-70,
+-76,
+-81,
+-86,
+-92,
+-97,
+-102,
+-107,
+-113,
+-118,
+-123,
+-128,
+-133,
+-138,
+-143,
+-148,
+-153,
+-158,
+-163,
+-168,
+-173,
+-178,
+-183,
+-188,
+-192,
+-197,
+-202,
+-207,
+-211,
+-216,
+-221,
+-225,
+-230,
+-234,
+-239,
+-243,
+-247,
+-252,
+-256,
+-260,
+-265,
+-269,
+-273,
+-277,
+-281,
+-285,
+-289,
+-293,
+-297,
+-301,
+-305,
+-308,
+-312,
+-316,
+-319,
+-323,
+-327,
+-330,
+-334,
+-337,
+-340,
+-344,
+-347,
+-350,
+-353,
+-357,
+-360,
+-363,
+-366,
+-369,
+-372,
+-374,
+-377,
+-380,
+-383,
+-385,
+-388,
+-390,
+-393,
+-395,
+-398,
+-400,
+-402,
+-405,
+-407,
+-409,
+-411,
+-413,
+-415,
+-417,
+-419,
+-420,
+-422,
+-424,
+-425,
+-427,
+-429,
+-430,
+-431,
+-433,
+-434,
+-435,
+-436,
+-438,
+-439,
+-440,
+-441,
+-442,
+-442,
+-443,
+-444,
+-445,
+-445,
+-446,
+-446,
+-447,
+-447,
+-448,
+-448,
+-448,
+-448,
+-449,
+-449,
+-449,
+-449,
+-449,
+-448,
+-448,
+-448,
+-448,
+-447,
+-447,
+-446,
+-446,
+-445,
+-445,
+-444,
+-443,
+-442,
+-442,
+-441,
+-440,
+-439,
+-438,
+-437,
+-435,
+-434,
+-433,
+-432,
+-430,
+-429,
+-427,
+-426,
+-424,
+-423,
+-421,
+-419,
+-418,
+-416,
+-414,
+-412,
+-410,
+-408,
+-406,
+-404,
+-402,
+-400,
+-397,
+-395,
+-393,
+-390,
+-388,
+-385,
+-383,
+-380,
+-378,
+-375,
+-373,
+-370,
+-367,
+-364,
+-361,
+-359,
+-356,
+-353,
+-350,
+-347,
+-344,
+-340,
+-337,
+-334,
+-331,
+-328,
+-324,
+-321,
+-318,
+-314,
+-311,
+-307,
+-304,
+-300,
+-297,
+-293,
+-290,
+-286,
+-282,
+-279,
+-275,
+-271,
+-267,
+-263,
+-260,
+-256,
+-252,
+-248,
+-244,
+-240,
+-236,
+-232,
+-228,
+-224,
+-220,
+-216,
+-212,
+-207,
+-203,
+-199,
+-195,
+-191,
+-186,
+-182,
+-178,
+-174,
+-169,
+-165,
+-161,
+-156,
+-152,
+-148,
+-143,
+-139,
+-134,
+-130,
+-126,
+-121,
+-117,
+-112,
+-108,
+-103,
+-99,
+-95,
+-90,
+-86,
+-81,
+-77,
+-72,
+-68,
+-63,
+-59,
+-54,
+-50,
+-45,
+-41,
+-36,
+-32,
+-27,
+-23,
+-18,
+-14,
+-9,
+-5,
+0,
+3,
+7,
+12,
+16,
+21,
+25,
+29,
+34,
+38,
+43,
+47,
+51,
+56,
+60,
+64,
+69,
+73,
+77,
+81,
+85,
+90,
+94,
+98,
+102,
+106,
+110,
+115,
+119,
+123,
+127,
+131,
+135,
+139,
+143,
+146,
+150,
+154,
+158,
+162,
+166,
+169,
+173,
+177,
+181,
+184,
+188,
+192,
+195,
+199,
+202,
+206,
+209,
+212,
+216,
+219,
+223,
+226,
+229,
+232,
+236,
+239,
+242,
+245,
+248,
+251,
+254,
+257,
+260,
+263,
+266,
+268,
+271,
+274,
+277,
+279,
+282,
+284,
+287,
+289,
+292,
+294,
+297,
+299,
+301,
+304,
+306,
+308,
+310,
+312,
+314,
+316,
+318,
+320,
+322,
+324,
+326,
+328,
+329,
+331,
+333,
+334,
+336,
+337,
+339,
+340,
+341,
+343,
+344,
+345,
+346,
+348,
+349,
+350,
+351,
+352,
+353,
+354,
+354,
+355,
+356,
+357,
+357,
+358,
+358,
+359,
+359,
+360,
+360,
+361,
+361,
+361,
+361,
+362,
+362,
+362,
+362,
+362,
+362,
+362,
+361,
+361,
+361,
+361,
+360,
+360,
+360,
+359,
+359,
+358,
+358,
+357,
+356,
+356,
+355,
+354,
+353,
+352,
+351,
+350,
+349,
+348,
+347,
+346,
+345,
+344,
+343,
+341,
+340,
+339,
+337,
+336,
+334,
+333,
+331,
+330,
+328,
+326,
+324,
+323,
+321,
+319,
+317,
+315,
+313,
+311,
+309,
+307,
+305,
+303,
+301,
+299,
+297,
+294,
+292,
+290,
+288,
+285,
+283,
+280,
+278,
+275,
+273,
+270,
+268,
+265,
+263,
+260,
+257,
+254,
+252,
+249,
+246,
+243,
+240,
+238,
+235,
+232,
+229,
+226,
+223,
+220,
+217,
+214,
+211,
+208,
+204,
+201,
+198,
+195,
+192,
+188,
+185,
+182,
+179,
+175,
+172,
+169,
+165,
+162,
+159,
+155,
+152,
+149,
+145,
+142,
+138,
+135,
+131,
+128,
+124,
+121,
+117,
+114,
+110,
+107,
+103,
+100,
+96,
+93,
+89,
+85,
+82,
+78,
+75,
+71,
+67,
+64,
+60,
+57,
+53,
+49,
+46,
+42,
+39,
+35,
+31,
+28,
+24,
+21,
+17,
+14,
+10,
+6,
+3,
+0,
+-3,
+-7,
+-10,
+-14,
+-18,
+-21,
+-25,
+-28,
+-32,
+-35,
+-39,
+-42,
+-45,
+-49,
+-52,
+-56,
+-59,
+-63,
+-66,
+-69,
+-73,
+-76,
+-79,
+-83,
+-86,
+-89,
+-93,
+-96,
+-99,
+-102,
+-105,
+-109,
+-112,
+-115,
+-118,
+-121,
+-124,
+-127,
+-130,
+-133,
+-136,
+-139,
+-142,
+-145,
+-148,
+-151,
+-154,
+-157,
+-160,
+-162,
+-165,
+-168,
+-171,
+-173,
+-176,
+-179,
+-181,
+-184,
+-186,
+-189,
+-191,
+-194,
+-196,
+-199,
+-201,
+-204,
+-206,
+-208,
+-211,
+-213,
+-215,
+-217,
+-219,
+-221,
+-224,
+-226,
+-228,
+-230,
+-232,
+-234,
+-236,
+-237,
+-239,
+-241,
+-243,
+-245,
+-246,
+-248,
+-250,
+-251,
+-253,
+-254,
+-256,
+-257,
+-259,
+-260,
+-262,
+-263,
+-264,
+-266,
+-267,
+-268,
+-269,
+-270,
+-271,
+-273,
+-274,
+-275,
+-275,
+-276,
+-277,
+-278,
+-279,
+-280,
+-281,
+-281,
+-282,
+-283,
+-283,
+-284,
+-284,
+-285,
+-285,
+-286,
+-286,
+-286,
+-287,
+-287,
+-287,
+-287,
+-288,
+-288,
+-288,
+-288,
+-288,
+-288,
+-288,
+-288,
+-288,
+-288,
+-287,
+-287,
+-287,
+-287,
+-286,
+-286,
+-286,
+-285,
+-285,
+-284,
+-284,
+-283,
+-283,
+-282,
+-281,
+-281,
+-280,
+-279,
+-278,
+-277,
+-277,
+-276,
+-275,
+-274,
+-273,
+-272,
+-271,
+-270,
+-269,
+-267,
+-266,
+-265,
+-264,
+-262,
+-261,
+-260,
+-258,
+-257,
+-256,
+-254,
+-253,
+-251,
+-250,
+-248,
+-247,
+-245,
+-243,
+-242,
+-240,
+-238,
+-236,
+-235,
+-233,
+-231,
+-229,
+-227,
+-225,
+-223,
+-221,
+-219,
+-217,
+-215,
+-213,
+-211,
+-209,
+-207,
+-205,
+-203,
+-201,
+-198,
+-196,
+-194,
+-192,
+-189,
+-187,
+-185,
+-182,
+-180,
+-178,
+-175,
+-173,
+-170,
+-168,
+-165,
+-163,
+-160,
+-158,
+-155,
+-153,
+-150,
+-148,
+-145,
+-142,
+-140,
+-137,
+-135,
+-132,
+-129,
+-127,
+-124,
+-121,
+-118,
+-116,
+-113,
+-110,
+-108,
+-105,
+-102,
+-99,
+-96,
+-94,
+-91,
+-88,
+-85,
+-82,
+-80,
+-77,
+-74,
+-71,
+-68,
+-65,
+-63,
+-60,
+-57,
+-54,
+-51,
+-48,
+-45,
+-42,
+-40,
+-37,
+-34,
+-31,
+-28,
+-25,
+-22,
+-20,
+-17,
+-14,
+-11,
+-8,
+-5,
+-2,
+0,
+2,
+5,
+8,
+11,
+13,
+16,
+19,
+22,
+25,
+27,
+30,
+33,
+36,
+38,
+41,
+44,
+47,
+49,
+52,
+55,
+57,
+60,
+63,
+65,
+68,
+71,
+73,
+76,
+78,
+81,
+83,
+86,
+88,
+91,
+93,
+96,
+98,
+101,
+103,
+106,
+108,
+110,
+113,
+115,
+117,
+120,
+122,
+124,
+127,
+129,
+131,
+133,
+135,
+137,
+140,
+142,
+144,
+146,
+148,
+150,
+152,
+154,
+156,
+158,
+160,
+161,
+163,
+165,
+167,
+169,
+171,
+172,
+174,
+176,
+177,
+179,
+181,
+182,
+184,
+185,
+187,
+188,
+190,
+191,
+193,
+194,
+195,
+197,
+198,
+199,
+201,
+202,
+203,
+204,
+205,
+207,
+208,
+209,
+210,
+211,
+212,
+213,
+214,
+215,
+216,
+216,
+217,
+218,
+219,
+219,
+220,
+221,
+222,
+222,
+223,
+223,
+224,
+224,
+225,
+225,
+226,
+226,
+227,
+227,
+227,
+227,
+228,
+228,
+228,
+228,
+228,
+229,
+229,
+229,
+229,
+229,
+229,
+229,
+229,
+228,
+228,
+228,
+228,
+228,
+228,
+227,
+227,
+227,
+226,
+226,
+225,
+225,
+225,
+224,
+224,
+223,
+222,
+222,
+221,
+221,
+220,
+219,
+218,
+218,
+217,
+216,
+215,
+214,
+214,
+213,
+212,
+211,
+210,
+209,
+208,
+207,
+206,
+205,
+203,
+202,
+201,
+200,
+199,
+197,
+196,
+195,
+194,
+192,
+191,
+190,
+188,
+187,
+185,
+184,
+182,
+181,
+179,
+178,
+176,
+175,
+173,
+172,
+170,
+168,
+167,
+165,
+163,
+162,
+160,
+158,
+156,
+155,
+153,
+151,
+149,
+147,
+146,
+144,
+142,
+140,
+138,
+136,
+134,
+132,
+130,
+128,
+126,
+124,
+122,
+120,
+118,
+116,
+114,
+112,
+110,
+108,
+106,
+104,
+102,
+99,
+97,
+95,
+93,
+91,
+89,
+87,
+84,
+82,
+80,
+78,
+76,
+73,
+71,
+69,
+67,
+64,
+62,
+60,
+58,
+56,
+53,
+51,
+49,
+47,
+44,
+42,
+40,
+38,
+35,
+33,
+31,
+28,
+26,
+24,
+22,
+19,
+17,
+15,
+13,
+10,
+8,
+6,
+4,
+1,
+0,
+-2,
+-4,
+-6,
+-9,
+-11,
+-13,
+-15,
+-17,
+-20,
+-22,
+-24,
+-26,
+-28,
+-30,
+-33,
+-35,
+-37,
+-39,
+-41,
+-43,
+-45,
+-47,
+-49,
+-52,
+-54,
+-56,
+-58,
+-60,
+-62,
+-64,
+-66,
+-68,
+-70,
+-72,
+-74,
+-76,
+-77,
+-79,
+-81,
+-83,
+-85,
+-87,
+-89,
+-90,
+-92,
+-94,
+-96,
+-98,
+-99,
+-101,
+-103,
+-105,
+-106,
+-108,
+-110,
+-111,
+-113,
+-114,
+-116,
+-118,
+-119,
+-121,
+-122,
+-124,
+-125,
+-127,
+-128,
+-130,
+-131,
+-132,
+-134,
+-135,
+-136,
+-138,
+-139,
+-140,
+-142,
+-143,
+-144,
+-145,
+-146,
+-148,
+-149,
+-150,
+-151,
+-152,
+-153,
+-154,
+-155,
+-156,
+-157,
+-158,
+-159,
+-160,
+-161,
+-162,
+-162,
+-163,
+-164,
+-165,
+-166,
+-166,
+-167,
+-168,
+-168,
+-169,
+-170,
+-170,
+-171,
+-171,
+-172,
+-172,
+-173,
+-173,
+-174,
+-174,
+-175,
+-175,
+-175,
+-176,
+-176,
+-176,
+-177,
+-177,
+-177,
+-177,
+-178,
+-178,
+-178,
+-178,
+-178,
+-178,
+-178,
+-178,
+-178,
+-178,
+-178,
+-178,
+-178,
+-178,
+-178,
+-178,
+-177,
+-177,
+-177,
+-177,
+-177,
+-176,
+-176,
+-176,
+-175,
+-175,
+-175,
+-174,
+-174,
+-173,
+-173,
+-172,
+-172,
+-171,
+-171,
+-170,
+-170,
+-169,
+-168,
+-168,
+-167,
+-166,
+-166,
+-165,
+-164,
+-163,
+-163,
+-162,
+-161,
+-160,
+-159,
+-158,
+-158,
+-157,
+-156,
+-155,
+-154,
+-153,
+-152,
+-151,
+-150,
+-149,
+-148,
+-147,
+-145,
+-144,
+-143,
+-142,
+-141,
+-140,
+-139,
+-137,
+-136,
+-135,
+-134,
+-132,
+-131,
+-130,
+-128,
+-127,
+-126,
+-124,
+-123,
+-122,
+-120,
+-119,
+-118,
+-116,
+-115,
+-113,
+-112,
+-110,
+-109,
+-107,
+-106,
+-104,
+-103,
+-101,
+-100,
+-98,
+-97,
+-95,
+-94,
+-92,
+-90,
+-89,
+-87,
+-86,
+-84,
+-82,
+-81,
+-79,
+-77,
+-76,
+-74,
+-72,
+-71,
+-69,
+-67,
+-66,
+-64,
+-62,
+-60,
+-59,
+-57,
+-55,
+-54,
+-52,
+-50,
+-48,
+-47,
+-45,
+-43,
+-41,
+-40,
+-38,
+-36,
+-34,
+-33,
+-31,
+-29,
+-27,
+-25,
+-24,
+-22,
+-20,
+-18,
+-17,
+-15,
+-13,
+-11,
+-10,
+-8,
+-6,
+-4,
+-3,
+-1,
+0,
+2,
+3,
+5,
+7,
+8,
+10,
+12,
+14,
+15,
+17,
+19,
+20,
+22,
+24,
+25,
+27,
+29,
+30,
+32,
+34,
+35,
+37,
+39,
+40,
+42,
+43,
+45,
+47,
+48,
+50,
+51,
+53,
+54,
+56,
+57,
+59,
+60,
+62,
+63,
+65,
+66,
+68,
+69,
+70,
+72,
+73,
+75,
+76,
+77,
+79,
+80,
+81,
+83,
+84,
+85,
+87,
+88,
+89,
+90,
+92,
+93,
+94,
+95,
+96,
+97,
+99,
+100,
+101,
+102,
+103,
+104,
+105,
+106,
+107,
+108,
+109,
+110,
+111,
+112,
+113,
+114,
+115,
+116,
+117,
+117,
+118,
+119,
+120,
+121,
+121,
+122,
+123,
+124,
+124,
+125,
+126,
+126,
+127,
+128,
+128,
+129,
+129,
+130,
+130,
+131,
+131,
+132,
+132,
+133,
+133,
+134,
+134,
+135,
+135,
+135,
+136,
+136,
+136,
+136,
+137,
+137,
+137,
+137,
+138,
+138,
+138,
+138,
+138,
+138,
+138,
+138,
+139,
+139,
+139,
+139,
+139,
+139,
+139,
+138,
+138,
+138,
+138,
+138,
+138,
+138,
+138,
+137,
+137,
+137,
+137,
+136,
+136,
+136,
+136,
+135,
+135,
+134,
+134,
+134,
+133,
+133,
+132,
+132,
+132,
+131,
+131,
+130,
+129,
+129,
+128,
+128,
+127,
+127,
+126,
+125,
+125,
+124,
+123,
+123,
+122,
+121,
+121,
+120,
+119,
+118,
+117,
+117,
+116,
+115,
+114,
+113,
+113,
+112,
+111,
+110,
+109,
+108,
+107,
+106,
+105,
+104,
+103,
+102,
+101,
+100,
+99,
+98,
+97,
+96,
+95,
+94,
+93,
+92,
+91,
+90,
+89,
+87,
+86,
+85,
+84,
+83,
+82,
+81,
+79,
+78,
+77,
+76,
+75,
+73,
+72,
+71,
+70,
+68,
+67,
+66,
+65,
+63,
+62,
+61,
+60,
+58,
+57,
+56,
+54,
+53,
+52,
+50,
+49,
+48,
+47,
+45,
+44,
+43,
+41,
+40,
+39,
+37,
+36,
+34,
+33,
+32,
+30,
+29,
+28,
+26,
+25,
+24,
+22,
+21,
+20,
+18,
+17,
+16,
+14,
+13,
+11,
+10,
+9,
+7,
+6,
+5,
+3,
+2,
+1,
+0,
+-1,
+-2,
+-4,
+-5,
+-6,
+-8,
+-9,
+-10,
+-11,
+-13,
+-14,
+-15,
+-17,
+-18,
+-19,
+-20,
+-22,
+-23,
+-24,
+-26,
+-27,
+-28,
+-29,
+-30,
+-32,
+-33,
+-34,
+-35,
+-37,
+-38,
+-39,
+-40,
+-41,
+-42,
+-44,
+-45,
+-46,
+-47,
+-48,
+-49,
+-50,
+-51,
+-53,
+-54,
+-55,
+-56,
+-57,
+-58,
+-59,
+-60,
+-61,
+-62,
+-63,
+-64,
+-65,
+-66,
+-67,
+-68,
+-69,
+-70,
+-71,
+-71,
+-72,
+-73,
+-74,
+-75,
+-76,
+-77,
+-77,
+-78,
+-79,
+-80,
+-81,
+-81,
+-82,
+-83,
+-84,
+-84,
+-85,
+-86,
+-87,
+-87,
+-88,
+-89,
+-89,
+-90,
+-90,
+-91,
+-92,
+-92,
+-93,
+-93,
+-94,
+-94,
+-95,
+-95,
+-96,
+-96,
+-97,
+-97,
+-98,
+-98,
+-99,
+-99,
+-99,
+-100,
+-100,
+-100,
+-101,
+-101,
+-101,
+-102,
+-102,
+-102,
+-102,
+-103,
+-103,
+-103,
+-103,
+-103,
+-104,
+-104,
+-104,
+-104,
+-104,
+-104,
+-104,
+-105,
+-105,
+-105,
+-105,
+-105,
+-105,
+-105,
+-105,
+-105,
+-105,
+-105,
+-105,
+-104,
+-104,
+-104,
+-104,
+-104,
+-104,
+-104,
+-104,
+-103,
+-103,
+-103,
+-103,
+-103,
+-102,
+-102,
+-102,
+-102,
+-101,
+-101,
+-101,
+-100,
+-100,
+-100,
+-99,
+-99,
+-99,
+-98,
+-98,
+-97,
+-97,
+-97,
+-96,
+-96,
+-95,
+-95,
+-94,
+-94,
+-93,
+-93,
+-92,
+-92,
+-91,
+-90,
+-90,
+-89,
+-89,
+-88,
+-87,
+-87,
+-86,
+-86,
+-85,
+-84,
+-84,
+-83,
+-82,
+-81,
+-81,
+-80,
+-79,
+-79,
+-78,
+-77,
+-76,
+-76,
+-75,
+-74,
+-73,
+-72,
+-72,
+-71,
+-70,
+-69,
+-68,
+-67,
+-67,
+-66,
+-65,
+-64,
+-63,
+-62,
+-61,
+-61,
+-60,
+-59,
+-58,
+-57,
+-56,
+-55,
+-54,
+-53,
+-52,
+-51,
+-50,
+-49,
+-48,
+-48,
+-47,
+-46,
+-45,
+-44,
+-43,
+-42,
+-41,
+-40,
+-39,
+-38,
+-37,
+-36,
+-35,
+-34,
+-33,
+-32,
+-31,
+-30,
+-29,
+-28,
+-27,
+-26,
+-25,
+-24,
+-23,
+-21,
+-20,
+-19,
+-18,
+-17,
+-16,
+-15,
+-14,
+-13,
+-12,
+-11,
+-10,
+-9,
+-8,
+-7,
+-6,
+-5,
+-4,
+-3,
+-2,
+-1,
+0,
+0,
+1,
+2,
+3,
+4,
+5,
+6,
+7,
+8,
+9,
+10,
+11,
+12,
+13,
+14,
+15,
+16,
+17,
+18,
+19,
+20,
+21,
+22,
+22,
+23,
+24,
+25,
+26,
+27,
+28,
+29,
+30,
+31,
+32,
+32,
+33,
+34,
+35,
+36,
+37,
+38,
+38,
+39,
+40,
+41,
+42,
+42,
+43,
+44,
+45,
+46,
+46,
+47,
+48,
+49,
+49,
+50,
+51,
+52,
+52,
+53,
+54,
+54,
+55,
+56,
+56,
+57,
+58,
+58,
+59,
+59,
+60,
+61,
+61,
+62,
+62,
+63,
+64,
+64,
+65,
+65,
+66,
+66,
+67,
+67,
+68,
+68,
+69,
+69,
+69,
+70,
+70,
+71,
+71,
+72,
+72,
+72,
+73,
+73,
+73,
+74,
+74,
+74,
+75,
+75,
+75,
+76,
+76,
+76,
+76,
+77,
+77,
+77,
+77,
+77,
+78,
+78,
+78,
+78,
+78,
+78,
+79,
+79,
+79,
+79,
+79,
+79,
+79,
+79,
+79,
+79,
+79,
+79,
+79,
+79,
+79,
+79,
+79,
+79,
+79,
+79,
+79,
+79,
+79,
+79,
+79,
+79,
+79,
+78,
+78,
+78,
+78,
+78,
+78,
+77,
+77,
+77,
+77,
+77,
+76,
+76,
+76,
+76,
+75,
+75,
+75,
+74,
+74,
+74,
+74,
+73,
+73,
+72,
+72,
+72,
+71,
+71,
+71,
+70,
+70,
+69,
+69,
+69,
+68,
+68,
+67,
+67,
+66,
+66,
+65,
+65,
+64,
+64,
+63,
+63,
+62,
+62,
+61,
+61,
+60,
+60,
+59,
+59,
+58,
+57,
+57,
+56,
+56,
+55,
+55,
+54,
+53,
+53,
+52,
+51,
+51,
+50,
+50,
+49,
+48,
+48,
+47,
+46,
+46,
+45,
+44,
+44,
+43,
+42,
+41,
+41,
+40,
+39,
+39,
+38,
+37,
+37,
+36,
+35,
+34,
+34,
+33,
+32,
+31,
+31,
+30,
+29,
+28,
+28,
+27,
+26,
+25,
+25,
+24,
+23,
+22,
+22,
+21,
+20,
+19,
+19,
+18,
+17,
+16,
+16,
+15,
+14,
+13,
+12,
+12,
+11,
+10,
+9,
+9,
+8,
+7,
+6,
+6,
+5,
+4,
+3,
+3,
+2,
+1,
+0,
+0,
+0,
+-1,
+-2,
+-2,
+-3,
+-4,
+-5,
+-5,
+-6,
+-7,
+-8,
+-8,
+-9,
+-10,
+-10,
+-11,
+-12,
+-13,
+-13,
+-14,
+-15,
+-15,
+-16,
+-17,
+-17,
+-18,
+-19,
+-19,
+-20,
+-21,
+-21,
+-22,
+-23,
+-23,
+-24,
+-25,
+-25,
+-26,
+-27,
+-27,
+-28,
+-28,
+-29,
+-30,
+-30,
+-31,
+-31,
+-32,
+-33,
+-33,
+-34,
+-34,
+-35,
+-35,
+-36,
+-36,
+-37,
+-37,
+-38,
+-38,
+-39,
+-39,
+-40,
+-40,
+-41,
+-41,
+-42,
+-42,
+-43,
+-43,
+-44,
+-44,
+-45,
+-45,
+-45,
+-46,
+-46,
+-47,
+-47,
+-47,
+-48,
+-48,
+-49,
+-49,
+-49,
+-50,
+-50,
+-50,
+-51,
+-51,
+-51,
+-51,
+-52,
+-52,
+-52,
+-53,
+-53,
+-53,
+-53,
+-54,
+-54,
+-54,
+-54,
+-54,
+-55,
+-55,
+-55,
+-55,
+-55,
+-56,
+-56,
+-56,
+-56,
+-56,
+-56,
+-56,
+-57,
+-57,
+-57,
+-57,
+-57,
+-57,
+-57,
+-57,
+-57,
+-57,
+-57,
+-57,
+-57,
+-57,
+-57,
+-57,
+-57,
+-57,
+-57,
+-57,
+-57,
+-57,
+-57,
+-57,
+-57,
+-57,
+-57,
+-57,
+-57,
+-57,
+-57,
+-57,
+-57,
+-56,
+-56,
+-56,
+-56,
+-56,
+-56,
+-56,
+-55,
+-55,
+-55,
+-55,
+-55,
+-54,
+-54,
+-54,
+-54,
+-54,
+-53,
+-53,
+-53,
+-53,
+-52,
+-52,
+-52,
+-52,
+-51,
+-51,
+-51,
+-50,
+-50,
+-50,
+-50,
+-49,
+-49,
+-49,
+-48,
+-48,
+-48,
+-47,
+-47,
+-46,
+-46,
+-46,
+-45,
+-45,
+-45,
+-44,
+-44,
+-43,
+-43,
+-43,
+-42,
+-42,
+-41,
+-41,
+-40,
+-40,
+-40,
+-39,
+-39,
+-38,
+-38,
+-37,
+-37,
+-36,
+-36,
+-35,
+-35,
+-35,
+-34,
+-34,
+-33,
+-33,
+-32,
+-32,
+-31,
+-31,
+-30,
+-30,
+-29,
+-29,
+-28,
+-28,
+-27,
+-26,
+-26,
+-25,
+-25,
+-24,
+-24,
+-23,
+-23,
+-22,
+-22,
+-21,
+-21,
+-20,
+-19,
+-19,
+-18,
+-18,
+-17,
+-17,
+-16,
+-16,
+-15,
+-15,
+-14,
+-13,
+-13,
+-12,
+-12,
+-11,
+-11,
+-10,
+-9,
+-9,
+-8,
+-8,
+-7,
+-7,
+-6,
+-6,
+-5,
+-4,
+-4,
+-3,
+-3,
+-2,
+-2,
+-1,
+-1,
+0,
+0,
+0,
+1,
+1,
+2,
+2,
+3,
+3,
+4,
+4,
+5,
+5,
+6,
+7,
+7,
+8,
+8,
+9,
+9,
+10,
+10,
+11,
+11,
+12,
+12,
+13,
+13,
+14,
+14,
+15,
+15,
+16,
+16,
+17,
+17,
+18,
+18,
+18,
+19,
+19,
+20,
+20,
+21,
+21,
+22,
+22,
+22,
+23,
+23,
+24,
+24,
+25,
+25,
+25,
+26,
+26,
+27,
+27,
+27,
+28,
+28,
+28,
+29,
+29,
+30,
+30,
+30,
+31,
+31,
+31,
+32,
+32,
+32,
+33,
+33,
+33,
+33,
+34,
+34,
+34,
+35,
+35,
+35,
+35,
+36,
+36,
+36,
+36,
+37,
+37,
+37,
+37,
+38,
+38,
+38,
+38,
+38,
+39,
+39,
+39,
+39,
+39,
+40,
+40,
+40,
+40,
+40,
+40,
+40,
+41,
+41,
+41,
+41,
+41,
+41,
+41,
+41,
+41,
+42,
+42,
+42,
+42,
+42,
+42,
+42,
+42,
+42,
+42,
+42,
+42,
+42,
+42,
+42,
+42,
+42,
+42,
+42,
+42,
+42,
+42,
+42,
+42,
+42,
+42,
+42,
+42,
+42,
+42,
+42,
+42,
+41,
+41,
+41,
+41,
+41,
+41,
+41,
+41,
+41,
+41,
+40,
+40,
+40,
+40,
+40,
+40,
+40,
+39,
+39,
+39,
+39,
+39,
+38,
+38,
+38,
+38,
+38,
+37,
+37,
+37,
+37,
+37,
+36,
+36,
+36,
+36,
+35,
+35,
+35,
+35,
+34,
+34,
+34,
+34,
+33,
+33,
+33,
+33,
+32,
+32,
+32,
+31,
+31,
+31,
+30,
+30,
+30,
+30,
+29,
+29,
+29,
+28,
+28,
+28,
+27,
+27,
+27,
+26,
+26,
+26,
+25,
+25,
+25,
+24,
+24,
+23,
+23,
+23,
+22,
+22,
+22,
+21,
+21,
+21,
+20,
+20,
+19,
+19,
+19,
+18,
+18,
+18,
+17,
+17,
+16,
+16,
+16,
+15,
+15,
+14,
+14,
+14,
+13,
+13,
+12,
+12,
+12,
+11,
+11,
+10,
+10,
+10,
+9,
+9,
+8,
+8,
+8,
+7,
+7,
+6,
+6,
+6,
+5,
+5,
+4,
+4,
+4,
+3,
+3,
+2,
+2,
+2,
+1,
+1,
+1,
+0,
+0,
+0,
+0,
+0,
+-1,
+-1,
+-2,
+-2,
+-2,
+-3,
+-3,
+-3,
+-4,
+-4,
+-5,
+-5,
+-5,
+-6,
+-6,
+-6,
+-7,
+-7,
+-7,
+-8,
+-8,
+-9,
+-9,
+-9,
+-10,
+-10,
+-10,
+-11,
+-11,
+-11,
+-12,
+-12,
+-12,
+-13,
+-13,
+-13,
+-14,
+-14,
+-14,
+-14,
+-15,
+-15,
+-15,
+-16,
+-16,
+-16,
+-17,
+-17,
+-17,
+-17,
+-18,
+-18,
+-18,
+-19,
+-19,
+-19,
+-19,
+-20,
+-20,
+-20,
+-20,
+-21,
+-21,
+-21,
+-21,
+-21,
+-22,
+-22,
+-22,
+-22,
+-23,
+-23,
+-23,
+-23,
+-23,
+-24,
+-24,
+-24,
+-24,
+-24,
+-25,
+-25,
+-25,
+-25,
+-25,
+-25,
+-26,
+-26,
+-26,
+-26,
+-26,
+-26,
+-26,
+-27,
+-27,
+-27,
+-27,
+-27,
+-27,
+-27,
+-27,
+-27,
+-28,
+-28,
+-28,
+-28,
+-28,
+-28,
+-28,
+-28,
+-28,
+-28,
+-28,
+-28,
+-28,
+-28,
+-28,
+-28,
+-29,
+-29,
+-29,
+-29,
+-29,
+-29,
+-29,
+-29,
+-29,
+-29,
+-29,
+-29,
+-29,
+-29,
+-29,
+-29,
+-29,
+-29,
+-29,
+-29,
+-28,
+-28,
+-28,
+-28,
+-28,
+-28,
+-28,
+-28,
+-28,
+-28,
+-28,
+-28,
+-28,
+-28,
+-28,
+-27,
+-27,
+-27,
+-27,
+-27,
+-27,
+-27,
+-27,
+-27,
+-27,
+-26,
+-26,
+-26,
+-26,
+-26,
+-26,
+-26,
+-25,
+-25,
+-25,
+-25,
+-25,
+-25,
+-25,
+-24,
+-24,
+-24,
+-24,
+-24,
+-24,
+-23,
+-23,
+-23,
+-23,
+-23,
+-22,
+-22,
+-22,
+-22,
+-22,
+-21,
+-21,
+-21,
+-21,
+-21,
+-20,
+-20,
+-20,
+-20,
+-20,
+-19,
+-19,
+-19,
+-19,
+-18,
+-18,
+-18,
+-18,
+-17,
+-17,
+-17,
+-17,
+-16,
+-16,
+-16,
+-16,
+-15,
+-15,
+-15,
+-15,
+-14,
+-14,
+-14,
+-14,
+-13,
+-13,
+-13,
+-13,
+-12,
+-12,
+-12,
+-12,
+-11,
+-11,
+-11,
+-11,
+-10,
+-10,
+-10,
+-9,
+-9,
+-9,
+-9,
+-8,
+-8,
+-8,
+-7,
+-7,
+-7,
+-7,
+-6,
+-6,
+-6,
+-6,
+-5,
+-5,
+-5,
+-4,
+-4,
+-4,
+-4,
+-3,
+-3,
+-3,
+-2,
+-2,
+-2,
+-2,
+-1,
+-1,
+-1,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+1,
+1,
+1,
+2,
+2,
+2,
+2,
+3,
+3,
+3,
+3,
+4,
+4,
+4,
+5,
+5,
+5,
+5,
+6,
+6,
+6,
+6,
+6,
+7,
+7,
+7,
+7,
+8,
+8,
+8,
+8,
+9,
+9,
+9,
+9,
+10,
+10,
+10,
+10,
+10,
+11,
+11,
+11,
+11,
+11,
+12,
+12,
+12,
+12,
+12,
+13,
+13,
+13,
+13,
+13,
+14,
+14,
+14,
+14,
+14,
+14,
+15,
+15,
+15,
+15,
+15,
+15,
+16,
+16,
+16,
+16,
+16,
+16,
+16,
+17,
+17,
+17,
+17,
+17,
+17,
+17,
+17,
+18,
+18,
+18,
+18,
+18,
+18,
+18,
+18,
+18,
+19,
+19,
+19,
+19,
+19,
+19,
+19,
+19,
+19,
+19,
+19,
+19,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+20,
+19,
+19,
+19,
+19,
+19,
+19,
+19,
+19,
+19,
+19,
+19,
+19,
+19,
+19,
+18,
+18,
+18,
+18,
+18,
+18,
+18,
+18,
+18,
+18,
+17,
+17,
+17,
+17,
+17,
+17,
+17,
+17,
+16,
+16,
+16,
+16,
+16,
+16,
+16,
+16,
+15,
+15,
+15,
+15,
+15,
+15,
+15,
+14,
+14,
+14,
+14,
+14,
+14,
+14,
+13,
+13,
+13,
+13,
+13,
+13,
+12,
+12,
+12,
+12,
+12,
+12,
+11,
+11,
+11,
+11,
+11,
+11,
+10,
+10,
+10,
+10,
+10,
+9,
+9,
+9,
+9,
+9,
+9,
+8,
+8,
+8,
+8,
+8,
+7,
+7,
+7,
+7,
+7,
+7,
+6,
+6,
+6,
+6,
+6,
+5,
+5,
+5,
+5,
+5,
+4,
+4,
+4,
+4,
+4,
+4,
+3,
+3,
+3,
+3,
+3,
+2,
+2,
+2,
+2,
+2,
+2,
+1,
+1,
+1,
+1,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-5,
+-5,
+-5,
+-5,
+-5,
+-5,
+-5,
+-6,
+-6,
+-6,
+-6,
+-6,
+-6,
+-6,
+-7,
+-7,
+-7,
+-7,
+-7,
+-7,
+-7,
+-7,
+-8,
+-8,
+-8,
+-8,
+-8,
+-8,
+-8,
+-8,
+-9,
+-9,
+-9,
+-9,
+-9,
+-9,
+-9,
+-9,
+-9,
+-10,
+-10,
+-10,
+-10,
+-10,
+-10,
+-10,
+-10,
+-10,
+-10,
+-10,
+-10,
+-11,
+-11,
+-11,
+-11,
+-11,
+-11,
+-11,
+-11,
+-11,
+-11,
+-11,
+-11,
+-11,
+-11,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-11,
+-11,
+-11,
+-11,
+-11,
+-11,
+-11,
+-11,
+-11,
+-11,
+-11,
+-11,
+-11,
+-11,
+-11,
+-11,
+-11,
+-10,
+-10,
+-10,
+-10,
+-10,
+-10,
+-10,
+-10,
+-10,
+-10,
+-10,
+-10,
+-9,
+-9,
+-9,
+-9,
+-9,
+-9,
+-9,
+-9,
+-9,
+-9,
+-9,
+-8,
+-8,
+-8,
+-8,
+-8,
+-8,
+-8,
+-8,
+-8,
+-8,
+-7,
+-7,
+-7,
+-7,
+-7,
+-7,
+-7,
+-7,
+-7,
+-6,
+-6,
+-6,
+-6,
+-6,
+-6,
+-6,
+-6,
+-6,
+-5,
+-5,
+-5,
+-5,
+-5,
+-5,
+-5,
+-5,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+4,
+4,
+4,
+4,
+4,
+4,
+4,
+4,
+4,
+4,
+4,
+5,
+5,
+5,
+5,
+5,
+5,
+5,
+5,
+5,
+5,
+5,
+5,
+6,
+6,
+6,
+6,
+6,
+6,
+6,
+6,
+6,
+6,
+6,
+6,
+6,
+6,
+7,
+7,
+7,
+7,
+7,
+7,
+7,
+7,
+7,
+7,
+7,
+7,
+7,
+7,
+7,
+7,
+7,
+7,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+8,
+7,
+7,
+7,
+7,
+7,
+7,
+7,
+7,
+7,
+7,
+7,
+7,
+7,
+7,
+7,
+7,
+7,
+7,
+7,
+7,
+6,
+6,
+6,
+6,
+6,
+6,
+6,
+6,
+6,
+6,
+6,
+6,
+6,
+6,
+6,
+6,
+6,
+5,
+5,
+5,
+5,
+5,
+5,
+5,
+5,
+5,
+5,
+5,
+5,
+5,
+5,
+5,
+4,
+4,
+4,
+4,
+4,
+4,
+4,
+4,
+4,
+4,
+4,
+4,
+4,
+4,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0};
+
+static const RES_HWORD LARGE_FILTER_IMPD[] /* Impulse response differences */ = {
+-1,
+-2,
+-3,
+-5,
+-6,
+-7,
+-9,
+-10,
+-11,
+-13,
+-14,
+-15,
+-17,
+-18,
+-19,
+-21,
+-22,
+-23,
+-25,
+-26,
+-27,
+-28,
+-30,
+-32,
+-32,
+-34,
+-35,
+-36,
+-38,
+-39,
+-40,
+-42,
+-43,
+-44,
+-45,
+-47,
+-48,
+-49,
+-51,
+-52,
+-53,
+-54,
+-56,
+-56,
+-58,
+-60,
+-60,
+-62,
+-63,
+-64,
+-66,
+-66,
+-68,
+-69,
+-70,
+-72,
+-72,
+-74,
+-75,
+-76,
+-77,
+-79,
+-79,
+-81,
+-82,
+-83,
+-84,
+-85,
+-87,
+-87,
+-89,
+-90,
+-90,
+-92,
+-93,
+-94,
+-95,
+-96,
+-98,
+-98,
+-99,
+-100,
+-102,
+-102,
+-103,
+-105,
+-105,
+-106,
+-108,
+-108,
+-109,
+-110,
+-111,
+-112,
+-113,
+-114,
+-115,
+-116,
+-116,
+-118,
+-118,
+-119,
+-121,
+-120,
+-122,
+-123,
+-123,
+-125,
+-125,
+-126,
+-126,
+-128,
+-128,
+-129,
+-130,
+-130,
+-132,
+-132,
+-132,
+-134,
+-134,
+-135,
+-135,
+-136,
+-137,
+-137,
+-138,
+-139,
+-139,
+-140,
+-141,
+-141,
+-142,
+-142,
+-143,
+-143,
+-144,
+-145,
+-145,
+-145,
+-146,
+-147,
+-147,
+-147,
+-148,
+-149,
+-148,
+-150,
+-149,
+-150,
+-151,
+-151,
+-151,
+-152,
+-152,
+-152,
+-153,
+-153,
+-153,
+-153,
+-154,
+-154,
+-155,
+-155,
+-155,
+-155,
+-155,
+-156,
+-156,
+-156,
+-156,
+-156,
+-157,
+-157,
+-157,
+-157,
+-157,
+-157,
+-157,
+-158,
+-157,
+-158,
+-158,
+-157,
+-158,
+-158,
+-158,
+-158,
+-157,
+-158,
+-158,
+-158,
+-157,
+-158,
+-158,
+-157,
+-158,
+-157,
+-157,
+-157,
+-157,
+-157,
+-157,
+-157,
+-156,
+-156,
+-156,
+-156,
+-156,
+-155,
+-155,
+-155,
+-155,
+-155,
+-154,
+-154,
+-153,
+-154,
+-153,
+-153,
+-152,
+-152,
+-152,
+-151,
+-151,
+-151,
+-150,
+-150,
+-150,
+-149,
+-149,
+-148,
+-148,
+-147,
+-147,
+-147,
+-146,
+-145,
+-145,
+-145,
+-144,
+-144,
+-143,
+-142,
+-142,
+-142,
+-141,
+-140,
+-140,
+-139,
+-139,
+-138,
+-137,
+-137,
+-136,
+-136,
+-135,
+-134,
+-134,
+-133,
+-132,
+-132,
+-131,
+-130,
+-130,
+-129,
+-128,
+-128,
+-126,
+-126,
+-126,
+-125,
+-123,
+-124,
+-122,
+-122,
+-121,
+-120,
+-119,
+-119,
+-117,
+-117,
+-117,
+-115,
+-114,
+-113,
+-113,
+-112,
+-112,
+-110,
+-110,
+-108,
+-108,
+-107,
+-106,
+-106,
+-104,
+-104,
+-102,
+-102,
+-101,
+-100,
+-99,
+-98,
+-98,
+-96,
+-95,
+-95,
+-94,
+-92,
+-92,
+-91,
+-90,
+-89,
+-88,
+-87,
+-86,
+-85,
+-85,
+-83,
+-82,
+-82,
+-80,
+-80,
+-78,
+-78,
+-76,
+-76,
+-75,
+-73,
+-73,
+-72,
+-70,
+-70,
+-69,
+-68,
+-66,
+-66,
+-65,
+-64,
+-63,
+-61,
+-61,
+-60,
+-59,
+-58,
+-57,
+-56,
+-55,
+-54,
+-53,
+-51,
+-51,
+-50,
+-49,
+-48,
+-47,
+-46,
+-45,
+-44,
+-43,
+-42,
+-41,
+-41,
+-39,
+-38,
+-37,
+-36,
+-35,
+-34,
+-34,
+-32,
+-31,
+-31,
+-29,
+-28,
+-28,
+-26,
+-26,
+-24,
+-24,
+-23,
+-21,
+-21,
+-20,
+-19,
+-18,
+-17,
+-16,
+-15,
+-14,
+-13,
+-13,
+-11,
+-11,
+-9,
+-9,
+-8,
+-7,
+-6,
+-5,
+-5,
+-3,
+-2,
+-2,
+-1,
+0,
+1,
+2,
+2,
+4,
+4,
+5,
+6,
+7,
+8,
+8,
+10,
+10,
+11,
+11,
+13,
+13,
+14,
+15,
+15,
+17,
+17,
+18,
+18,
+20,
+20,
+21,
+21,
+23,
+23,
+23,
+25,
+25,
+26,
+26,
+27,
+28,
+28,
+30,
+29,
+31,
+31,
+32,
+32,
+33,
+34,
+34,
+35,
+35,
+36,
+37,
+37,
+37,
+39,
+39,
+39,
+40,
+40,
+41,
+42,
+42,
+42,
+43,
+44,
+44,
+44,
+45,
+46,
+45,
+47,
+46,
+48,
+47,
+48,
+49,
+49,
+49,
+49,
+50,
+51,
+51,
+51,
+51,
+52,
+52,
+53,
+53,
+53,
+53,
+54,
+54,
+54,
+55,
+55,
+55,
+55,
+56,
+56,
+56,
+56,
+57,
+57,
+57,
+57,
+58,
+57,
+58,
+58,
+58,
+58,
+59,
+58,
+59,
+59,
+59,
+59,
+59,
+59,
+59,
+60,
+59,
+60,
+59,
+60,
+60,
+60,
+59,
+60,
+60,
+60,
+60,
+59,
+60,
+60,
+60,
+60,
+59,
+60,
+60,
+59,
+60,
+59,
+60,
+59,
+59,
+59,
+59,
+59,
+59,
+59,
+58,
+59,
+58,
+58,
+58,
+58,
+57,
+58,
+57,
+57,
+57,
+57,
+55,
+57,
+56,
+56,
+55,
+56,
+55,
+55,
+54,
+55,
+54,
+54,
+54,
+53,
+53,
+53,
+52,
+53,
+52,
+51,
+52,
+51,
+50,
+51,
+50,
+49,
+50,
+49,
+48,
+49,
+48,
+47,
+47,
+47,
+47,
+46,
+46,
+45,
+45,
+45,
+44,
+44,
+43,
+43,
+42,
+43,
+41,
+42,
+40,
+41,
+40,
+39,
+40,
+38,
+39,
+37,
+38,
+37,
+36,
+36,
+35,
+36,
+34,
+34,
+34,
+33,
+33,
+32,
+32,
+31,
+31,
+30,
+30,
+29,
+29,
+28,
+28,
+27,
+27,
+26,
+26,
+25,
+25,
+24,
+24,
+24,
+22,
+23,
+21,
+21,
+21,
+20,
+20,
+19,
+19,
+18,
+18,
+17,
+16,
+16,
+16,
+15,
+14,
+14,
+14,
+13,
+12,
+12,
+11,
+11,
+11,
+9,
+10,
+8,
+9,
+7,
+8,
+6,
+7,
+5,
+5,
+5,
+4,
+4,
+3,
+3,
+2,
+1,
+1,
+1,
+0,
+0,
+-1,
+-1,
+-2,
+-3,
+-3,
+-3,
+-4,
+-4,
+-5,
+-5,
+-6,
+-6,
+-7,
+-7,
+-8,
+-8,
+-8,
+-9,
+-10,
+-10,
+-10,
+-11,
+-11,
+-12,
+-12,
+-13,
+-13,
+-14,
+-14,
+-14,
+-15,
+-15,
+-16,
+-16,
+-16,
+-17,
+-18,
+-17,
+-18,
+-19,
+-19,
+-19,
+-20,
+-20,
+-21,
+-20,
+-22,
+-21,
+-22,
+-23,
+-22,
+-23,
+-24,
+-23,
+-25,
+-24,
+-25,
+-25,
+-25,
+-26,
+-26,
+-27,
+-26,
+-27,
+-28,
+-27,
+-28,
+-28,
+-29,
+-29,
+-29,
+-29,
+-30,
+-30,
+-30,
+-30,
+-31,
+-31,
+-31,
+-31,
+-32,
+-32,
+-32,
+-32,
+-33,
+-33,
+-33,
+-33,
+-33,
+-34,
+-34,
+-34,
+-34,
+-34,
+-35,
+-34,
+-35,
+-35,
+-35,
+-36,
+-35,
+-36,
+-35,
+-36,
+-36,
+-36,
+-37,
+-36,
+-36,
+-37,
+-37,
+-36,
+-37,
+-37,
+-37,
+-37,
+-37,
+-38,
+-37,
+-37,
+-38,
+-37,
+-38,
+-37,
+-38,
+-37,
+-38,
+-38,
+-37,
+-38,
+-38,
+-37,
+-38,
+-38,
+-37,
+-38,
+-38,
+-37,
+-38,
+-37,
+-38,
+-37,
+-38,
+-37,
+-38,
+-37,
+-37,
+-37,
+-37,
+-37,
+-37,
+-37,
+-37,
+-35,
+-37,
+-36,
+-37,
+-36,
+-36,
+-36,
+-36,
+-36,
+-35,
+-36,
+-35,
+-36,
+-35,
+-35,
+-34,
+-35,
+-34,
+-35,
+-34,
+-34,
+-34,
+-33,
+-34,
+-33,
+-33,
+-33,
+-32,
+-33,
+-32,
+-32,
+-32,
+-32,
+-31,
+-31,
+-31,
+-31,
+-31,
+-30,
+-30,
+-30,
+-29,
+-30,
+-29,
+-29,
+-28,
+-28,
+-29,
+-27,
+-28,
+-27,
+-27,
+-27,
+-26,
+-27,
+-25,
+-26,
+-25,
+-26,
+-24,
+-25,
+-24,
+-24,
+-23,
+-24,
+-23,
+-22,
+-23,
+-22,
+-22,
+-21,
+-21,
+-21,
+-21,
+-20,
+-20,
+-19,
+-19,
+-19,
+-19,
+-18,
+-18,
+-18,
+-17,
+-17,
+-17,
+-16,
+-16,
+-15,
+-16,
+-14,
+-15,
+-14,
+-14,
+-14,
+-13,
+-13,
+-12,
+-12,
+-12,
+-12,
+-11,
+-10,
+-11,
+-10,
+-10,
+-9,
+-9,
+-9,
+-8,
+-8,
+-8,
+-7,
+-7,
+-6,
+-6,
+-6,
+-6,
+-5,
+-5,
+-4,
+-4,
+-4,
+-3,
+-3,
+-3,
+-2,
+-2,
+-2,
+-1,
+-1,
+-1,
+0,
+0,
+0,
+1,
+1,
+2,
+1,
+3,
+2,
+3,
+3,
+4,
+3,
+4,
+5,
+5,
+5,
+5,
+6,
+6,
+7,
+6,
+8,
+7,
+8,
+8,
+8,
+9,
+9,
+9,
+10,
+9,
+11,
+10,
+11,
+11,
+11,
+12,
+12,
+12,
+13,
+13,
+13,
+13,
+14,
+14,
+14,
+14,
+15,
+15,
+15,
+16,
+16,
+16,
+16,
+17,
+16,
+18,
+17,
+17,
+18,
+18,
+18,
+19,
+19,
+19,
+19,
+19,
+20,
+19,
+20,
+21,
+20,
+21,
+21,
+21,
+21,
+21,
+22,
+22,
+22,
+22,
+22,
+23,
+22,
+23,
+23,
+23,
+23,
+24,
+24,
+23,
+24,
+24,
+24,
+25,
+24,
+25,
+24,
+25,
+25,
+25,
+25,
+26,
+25,
+26,
+25,
+26,
+26,
+25,
+26,
+26,
+26,
+27,
+26,
+26,
+27,
+26,
+27,
+26,
+27,
+26,
+27,
+27,
+27,
+26,
+27,
+27,
+27,
+27,
+27,
+27,
+27,
+27,
+27,
+27,
+27,
+27,
+27,
+27,
+27,
+27,
+27,
+26,
+27,
+27,
+27,
+27,
+26,
+27,
+27,
+26,
+26,
+26,
+27,
+26,
+26,
+27,
+26,
+26,
+26,
+26,
+26,
+26,
+25,
+26,
+25,
+26,
+25,
+25,
+25,
+25,
+25,
+25,
+25,
+24,
+24,
+25,
+24,
+24,
+24,
+23,
+24,
+24,
+23,
+23,
+23,
+23,
+23,
+22,
+23,
+22,
+22,
+22,
+22,
+21,
+22,
+21,
+21,
+21,
+21,
+20,
+20,
+21,
+20,
+19,
+20,
+19,
+19,
+19,
+19,
+19,
+18,
+18,
+18,
+18,
+18,
+17,
+17,
+17,
+17,
+16,
+16,
+16,
+16,
+16,
+15,
+15,
+15,
+14,
+15,
+14,
+14,
+14,
+13,
+13,
+13,
+13,
+12,
+13,
+12,
+11,
+12,
+11,
+11,
+11,
+10,
+11,
+10,
+9,
+10,
+9,
+9,
+9,
+8,
+9,
+8,
+7,
+8,
+7,
+7,
+7,
+6,
+6,
+6,
+6,
+5,
+5,
+5,
+5,
+4,
+4,
+4,
+3,
+4,
+3,
+3,
+2,
+2,
+2,
+2,
+2,
+1,
+1,
+0,
+1,
+0,
+0,
+0,
+-1,
+-1,
+-1,
+-1,
+-2,
+-2,
+-2,
+-2,
+-3,
+-2,
+-4,
+-3,
+-3,
+-4,
+-4,
+-5,
+-4,
+-5,
+-5,
+-5,
+-6,
+-6,
+-6,
+-6,
+-7,
+-6,
+-7,
+-7,
+-8,
+-7,
+-8,
+-8,
+-9,
+-8,
+-9,
+-9,
+-9,
+-10,
+-9,
+-10,
+-10,
+-10,
+-11,
+-10,
+-11,
+-11,
+-12,
+-11,
+-12,
+-12,
+-12,
+-12,
+-13,
+-12,
+-13,
+-13,
+-13,
+-14,
+-13,
+-14,
+-14,
+-14,
+-14,
+-15,
+-14,
+-15,
+-15,
+-15,
+-15,
+-16,
+-15,
+-16,
+-16,
+-16,
+-16,
+-16,
+-17,
+-16,
+-17,
+-17,
+-17,
+-17,
+-17,
+-18,
+-17,
+-18,
+-18,
+-17,
+-18,
+-18,
+-19,
+-18,
+-18,
+-19,
+-18,
+-19,
+-19,
+-19,
+-19,
+-19,
+-19,
+-19,
+-19,
+-20,
+-19,
+-20,
+-19,
+-20,
+-20,
+-20,
+-19,
+-20,
+-20,
+-20,
+-20,
+-20,
+-21,
+-20,
+-20,
+-20,
+-21,
+-20,
+-20,
+-21,
+-20,
+-21,
+-20,
+-20,
+-21,
+-20,
+-21,
+-20,
+-21,
+-20,
+-21,
+-20,
+-21,
+-21,
+-20,
+-20,
+-21,
+-20,
+-21,
+-20,
+-21,
+-20,
+-20,
+-20,
+-20,
+-20,
+-20,
+-20,
+-20,
+-20,
+-20,
+-20,
+-20,
+-20,
+-20,
+-19,
+-20,
+-20,
+-19,
+-20,
+-19,
+-19,
+-19,
+-20,
+-19,
+-19,
+-18,
+-19,
+-19,
+-19,
+-18,
+-18,
+-19,
+-18,
+-18,
+-18,
+-18,
+-18,
+-18,
+-17,
+-18,
+-17,
+-17,
+-17,
+-17,
+-17,
+-17,
+-16,
+-17,
+-16,
+-16,
+-17,
+-15,
+-16,
+-16,
+-15,
+-16,
+-15,
+-15,
+-15,
+-15,
+-15,
+-14,
+-14,
+-15,
+-14,
+-13,
+-14,
+-14,
+-13,
+-13,
+-13,
+-13,
+-13,
+-13,
+-12,
+-12,
+-12,
+-12,
+-12,
+-11,
+-12,
+-11,
+-11,
+-11,
+-10,
+-11,
+-10,
+-10,
+-10,
+-9,
+-10,
+-9,
+-9,
+-9,
+-9,
+-9,
+-8,
+-8,
+-8,
+-8,
+-8,
+-7,
+-7,
+-7,
+-7,
+-7,
+-6,
+-6,
+-6,
+-6,
+-6,
+-5,
+-5,
+-6,
+-4,
+-5,
+-4,
+-5,
+-4,
+-4,
+-3,
+-4,
+-3,
+-3,
+-3,
+-2,
+-3,
+-2,
+-2,
+-2,
+-1,
+-2,
+-1,
+-1,
+-1,
+0,
+-1,
+0,
+0,
+0,
+1,
+0,
+1,
+1,
+1,
+1,
+2,
+2,
+2,
+2,
+2,
+3,
+3,
+2,
+4,
+3,
+3,
+4,
+4,
+4,
+4,
+5,
+4,
+5,
+5,
+5,
+6,
+5,
+6,
+6,
+6,
+6,
+7,
+6,
+7,
+7,
+7,
+7,
+8,
+7,
+8,
+8,
+8,
+8,
+9,
+8,
+9,
+9,
+9,
+9,
+10,
+9,
+10,
+10,
+10,
+10,
+10,
+11,
+10,
+11,
+11,
+11,
+11,
+11,
+11,
+12,
+11,
+12,
+12,
+12,
+12,
+12,
+13,
+12,
+13,
+13,
+12,
+13,
+13,
+14,
+13,
+13,
+14,
+13,
+14,
+14,
+13,
+14,
+14,
+15,
+14,
+14,
+14,
+15,
+14,
+15,
+15,
+14,
+15,
+15,
+15,
+15,
+15,
+16,
+15,
+15,
+15,
+16,
+15,
+16,
+15,
+16,
+15,
+16,
+16,
+16,
+15,
+16,
+16,
+16,
+16,
+16,
+16,
+16,
+16,
+16,
+16,
+16,
+16,
+16,
+16,
+16,
+16,
+17,
+16,
+16,
+16,
+16,
+16,
+16,
+16,
+16,
+16,
+16,
+16,
+16,
+16,
+15,
+16,
+16,
+16,
+16,
+16,
+15,
+16,
+16,
+15,
+16,
+16,
+15,
+15,
+16,
+15,
+16,
+15,
+15,
+15,
+15,
+15,
+15,
+15,
+15,
+15,
+14,
+15,
+14,
+15,
+14,
+14,
+15,
+14,
+14,
+14,
+14,
+13,
+14,
+14,
+13,
+13,
+14,
+13,
+13,
+13,
+13,
+13,
+12,
+13,
+12,
+13,
+12,
+12,
+12,
+12,
+12,
+12,
+11,
+12,
+11,
+11,
+11,
+11,
+11,
+11,
+10,
+11,
+10,
+10,
+10,
+10,
+10,
+10,
+9,
+10,
+9,
+9,
+9,
+9,
+8,
+9,
+8,
+9,
+8,
+8,
+8,
+7,
+8,
+7,
+7,
+7,
+7,
+7,
+7,
+6,
+7,
+6,
+6,
+6,
+5,
+6,
+5,
+5,
+6,
+4,
+5,
+5,
+4,
+5,
+4,
+4,
+4,
+3,
+4,
+3,
+3,
+3,
+3,
+3,
+2,
+3,
+2,
+2,
+2,
+2,
+1,
+2,
+1,
+1,
+1,
+1,
+1,
+0,
+0,
+1,
+0,
+-1,
+0,
+0,
+-1,
+-1,
+-1,
+-1,
+-1,
+-2,
+-1,
+-2,
+-2,
+-2,
+-2,
+-2,
+-3,
+-2,
+-3,
+-3,
+-3,
+-3,
+-4,
+-3,
+-4,
+-4,
+-4,
+-4,
+-4,
+-5,
+-4,
+-5,
+-5,
+-5,
+-5,
+-5,
+-6,
+-5,
+-6,
+-6,
+-6,
+-6,
+-6,
+-6,
+-7,
+-6,
+-7,
+-7,
+-7,
+-7,
+-7,
+-7,
+-8,
+-8,
+-7,
+-8,
+-8,
+-8,
+-8,
+-9,
+-8,
+-9,
+-8,
+-9,
+-9,
+-9,
+-9,
+-9,
+-9,
+-10,
+-9,
+-10,
+-9,
+-10,
+-10,
+-10,
+-10,
+-10,
+-10,
+-11,
+-10,
+-11,
+-10,
+-11,
+-11,
+-11,
+-10,
+-11,
+-11,
+-12,
+-11,
+-11,
+-11,
+-12,
+-11,
+-12,
+-12,
+-11,
+-12,
+-12,
+-12,
+-11,
+-12,
+-12,
+-13,
+-12,
+-12,
+-12,
+-12,
+-13,
+-12,
+-12,
+-13,
+-12,
+-13,
+-12,
+-13,
+-12,
+-13,
+-13,
+-12,
+-13,
+-13,
+-13,
+-12,
+-13,
+-13,
+-13,
+-13,
+-12,
+-13,
+-13,
+-13,
+-13,
+-13,
+-13,
+-12,
+-13,
+-13,
+-13,
+-13,
+-13,
+-13,
+-13,
+-12,
+-13,
+-13,
+-13,
+-13,
+-11,
+-13,
+-13,
+-12,
+-13,
+-13,
+-12,
+-13,
+-12,
+-13,
+-12,
+-13,
+-12,
+-13,
+-12,
+-12,
+-13,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-11,
+-12,
+-12,
+-11,
+-12,
+-11,
+-11,
+-12,
+-11,
+-11,
+-11,
+-11,
+-11,
+-11,
+-11,
+-11,
+-10,
+-11,
+-10,
+-11,
+-10,
+-10,
+-10,
+-10,
+-10,
+-10,
+-10,
+-10,
+-10,
+-9,
+-10,
+-9,
+-9,
+-9,
+-9,
+-9,
+-9,
+-9,
+-9,
+-8,
+-9,
+-8,
+-8,
+-8,
+-8,
+-8,
+-8,
+-8,
+-8,
+-7,
+-7,
+-8,
+-7,
+-7,
+-7,
+-7,
+-6,
+-7,
+-7,
+-6,
+-6,
+-6,
+-6,
+-6,
+-6,
+-6,
+-5,
+-6,
+-5,
+-5,
+-5,
+-5,
+-5,
+-4,
+-5,
+-4,
+-5,
+-4,
+-4,
+-4,
+-4,
+-3,
+-4,
+-3,
+-4,
+-3,
+-3,
+-3,
+-3,
+-2,
+-3,
+-2,
+-2,
+-3,
+-2,
+-1,
+-2,
+-2,
+-1,
+-2,
+-1,
+-1,
+-1,
+-1,
+-1,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+1,
+1,
+0,
+2,
+1,
+1,
+1,
+2,
+2,
+1,
+2,
+2,
+3,
+2,
+2,
+3,
+2,
+3,
+3,
+3,
+3,
+3,
+4,
+3,
+4,
+4,
+3,
+4,
+4,
+4,
+5,
+4,
+5,
+4,
+5,
+5,
+5,
+5,
+5,
+5,
+5,
+6,
+5,
+6,
+6,
+6,
+6,
+6,
+6,
+6,
+6,
+7,
+6,
+7,
+7,
+7,
+7,
+7,
+7,
+7,
+7,
+7,
+8,
+7,
+8,
+8,
+7,
+8,
+8,
+8,
+8,
+8,
+8,
+9,
+8,
+9,
+8,
+9,
+8,
+9,
+9,
+8,
+9,
+9,
+9,
+9,
+9,
+10,
+9,
+9,
+9,
+10,
+9,
+10,
+9,
+10,
+10,
+9,
+10,
+10,
+9,
+10,
+10,
+10,
+10,
+10,
+10,
+10,
+10,
+10,
+10,
+11,
+10,
+10,
+10,
+10,
+11,
+10,
+10,
+11,
+10,
+10,
+11,
+10,
+10,
+11,
+10,
+10,
+11,
+10,
+11,
+10,
+11,
+10,
+10,
+11,
+10,
+10,
+11,
+10,
+11,
+10,
+10,
+10,
+10,
+10,
+10,
+11,
+10,
+10,
+10,
+10,
+11,
+10,
+10,
+10,
+10,
+10,
+10,
+10,
+10,
+9,
+10,
+10,
+10,
+9,
+10,
+10,
+9,
+10,
+9,
+10,
+9,
+9,
+10,
+9,
+9,
+9,
+9,
+9,
+9,
+9,
+9,
+9,
+8,
+9,
+9,
+8,
+9,
+8,
+8,
+9,
+8,
+8,
+8,
+8,
+8,
+8,
+7,
+8,
+8,
+7,
+8,
+7,
+7,
+8,
+7,
+7,
+7,
+7,
+6,
+7,
+7,
+6,
+7,
+6,
+7,
+6,
+6,
+6,
+6,
+6,
+6,
+5,
+6,
+5,
+6,
+5,
+5,
+5,
+5,
+5,
+5,
+5,
+4,
+5,
+4,
+5,
+4,
+4,
+4,
+4,
+4,
+4,
+3,
+4,
+3,
+4,
+3,
+3,
+3,
+3,
+3,
+3,
+2,
+3,
+2,
+2,
+3,
+2,
+2,
+2,
+1,
+2,
+2,
+1,
+2,
+1,
+1,
+1,
+1,
+1,
+1,
+0,
+1,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+-1,
+-1,
+0,
+-1,
+-1,
+-1,
+-2,
+-1,
+-1,
+-2,
+-1,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-3,
+-2,
+-3,
+-2,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-4,
+-3,
+-4,
+-3,
+-4,
+-4,
+-3,
+-4,
+-4,
+-5,
+-4,
+-4,
+-4,
+-5,
+-4,
+-5,
+-5,
+-5,
+-4,
+-5,
+-5,
+-6,
+-5,
+-5,
+-5,
+-6,
+-5,
+-6,
+-5,
+-6,
+-6,
+-6,
+-6,
+-6,
+-6,
+-6,
+-6,
+-6,
+-7,
+-6,
+-6,
+-7,
+-6,
+-7,
+-7,
+-6,
+-7,
+-7,
+-7,
+-7,
+-7,
+-7,
+-7,
+-7,
+-8,
+-7,
+-7,
+-8,
+-7,
+-8,
+-7,
+-8,
+-7,
+-8,
+-7,
+-8,
+-8,
+-8,
+-8,
+-7,
+-8,
+-8,
+-8,
+-8,
+-8,
+-8,
+-8,
+-8,
+-9,
+-8,
+-8,
+-8,
+-8,
+-9,
+-8,
+-8,
+-8,
+-9,
+-8,
+-8,
+-9,
+-8,
+-9,
+-8,
+-8,
+-9,
+-8,
+-9,
+-8,
+-9,
+-8,
+-8,
+-9,
+-8,
+-9,
+-8,
+-9,
+-8,
+-9,
+-8,
+-8,
+-9,
+-8,
+-9,
+-8,
+-7,
+-9,
+-8,
+-8,
+-9,
+-8,
+-8,
+-9,
+-8,
+-8,
+-8,
+-8,
+-8,
+-9,
+-8,
+-8,
+-8,
+-8,
+-8,
+-8,
+-8,
+-8,
+-7,
+-8,
+-8,
+-8,
+-7,
+-8,
+-8,
+-7,
+-8,
+-7,
+-8,
+-7,
+-8,
+-7,
+-7,
+-7,
+-8,
+-7,
+-7,
+-7,
+-7,
+-7,
+-7,
+-7,
+-6,
+-7,
+-7,
+-6,
+-7,
+-7,
+-6,
+-6,
+-7,
+-6,
+-6,
+-6,
+-6,
+-6,
+-6,
+-6,
+-6,
+-6,
+-6,
+-5,
+-6,
+-5,
+-6,
+-5,
+-5,
+-6,
+-5,
+-5,
+-5,
+-5,
+-5,
+-4,
+-5,
+-5,
+-4,
+-5,
+-4,
+-5,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-3,
+-4,
+-3,
+-4,
+-3,
+-3,
+-3,
+-4,
+-3,
+-2,
+-3,
+-3,
+-3,
+-2,
+-3,
+-2,
+-3,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-1,
+-2,
+-1,
+-2,
+-1,
+-1,
+-1,
+-2,
+-1,
+0,
+-1,
+-1,
+-1,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+2,
+1,
+2,
+1,
+2,
+2,
+2,
+1,
+2,
+2,
+3,
+2,
+2,
+2,
+3,
+2,
+3,
+3,
+2,
+3,
+3,
+3,
+3,
+3,
+3,
+4,
+3,
+3,
+4,
+3,
+4,
+3,
+4,
+4,
+4,
+4,
+4,
+4,
+4,
+4,
+4,
+5,
+4,
+4,
+5,
+5,
+4,
+5,
+5,
+4,
+5,
+5,
+5,
+5,
+5,
+5,
+5,
+6,
+5,
+5,
+5,
+6,
+5,
+6,
+5,
+6,
+6,
+5,
+6,
+6,
+6,
+5,
+6,
+6,
+6,
+6,
+6,
+6,
+7,
+6,
+6,
+6,
+6,
+7,
+6,
+6,
+7,
+6,
+7,
+6,
+6,
+7,
+7,
+6,
+7,
+6,
+7,
+6,
+7,
+7,
+7,
+6,
+7,
+7,
+6,
+7,
+7,
+7,
+7,
+6,
+7,
+7,
+7,
+7,
+7,
+6,
+7,
+7,
+7,
+7,
+7,
+7,
+6,
+7,
+7,
+7,
+7,
+7,
+7,
+6,
+7,
+7,
+6,
+7,
+6,
+7,
+7,
+7,
+6,
+7,
+7,
+6,
+7,
+7,
+6,
+7,
+7,
+6,
+7,
+6,
+7,
+6,
+7,
+6,
+6,
+7,
+6,
+6,
+7,
+6,
+6,
+6,
+6,
+6,
+7,
+6,
+6,
+6,
+6,
+5,
+6,
+6,
+6,
+6,
+5,
+6,
+6,
+5,
+6,
+5,
+6,
+5,
+5,
+6,
+5,
+5,
+5,
+5,
+5,
+5,
+5,
+5,
+5,
+5,
+5,
+5,
+4,
+5,
+4,
+5,
+4,
+5,
+4,
+4,
+4,
+5,
+4,
+4,
+4,
+4,
+3,
+4,
+4,
+4,
+3,
+4,
+3,
+4,
+3,
+3,
+4,
+3,
+3,
+3,
+3,
+3,
+3,
+2,
+3,
+3,
+2,
+3,
+2,
+3,
+2,
+2,
+3,
+2,
+2,
+2,
+2,
+2,
+1,
+2,
+2,
+1,
+2,
+1,
+2,
+1,
+1,
+1,
+2,
+1,
+1,
+0,
+1,
+1,
+1,
+0,
+1,
+0,
+1,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+-1,
+0,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-2,
+-1,
+-1,
+-2,
+-1,
+-2,
+-2,
+-1,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-3,
+-2,
+-2,
+-3,
+-2,
+-3,
+-2,
+-3,
+-3,
+-2,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-4,
+-3,
+-3,
+-4,
+-3,
+-4,
+-3,
+-4,
+-3,
+-4,
+-4,
+-3,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-5,
+-4,
+-4,
+-5,
+-4,
+-4,
+-5,
+-4,
+-5,
+-4,
+-5,
+-5,
+-4,
+-5,
+-5,
+-4,
+-5,
+-5,
+-5,
+-5,
+-5,
+-5,
+-5,
+-5,
+-5,
+-5,
+-5,
+-5,
+-5,
+-5,
+-6,
+-5,
+-5,
+-5,
+-5,
+-6,
+-5,
+-5,
+-6,
+-5,
+-5,
+-6,
+-5,
+-6,
+-5,
+-6,
+-5,
+-6,
+-5,
+-5,
+-6,
+-6,
+-5,
+-6,
+-5,
+-6,
+-5,
+-6,
+-5,
+-6,
+-5,
+-6,
+-6,
+-5,
+-6,
+-5,
+-6,
+-5,
+-6,
+-5,
+-6,
+-6,
+-5,
+-6,
+-5,
+-5,
+-5,
+-6,
+-5,
+-6,
+-5,
+-6,
+-5,
+-5,
+-6,
+-5,
+-6,
+-5,
+-5,
+-6,
+-5,
+-5,
+-6,
+-5,
+-5,
+-5,
+-6,
+-5,
+-5,
+-5,
+-5,
+-5,
+-5,
+-5,
+-5,
+-5,
+-5,
+-5,
+-5,
+-5,
+-5,
+-5,
+-4,
+-5,
+-5,
+-5,
+-4,
+-5,
+-5,
+-4,
+-5,
+-4,
+-5,
+-4,
+-4,
+-5,
+-4,
+-4,
+-5,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-4,
+-3,
+-4,
+-4,
+-3,
+-4,
+-4,
+-3,
+-4,
+-3,
+-3,
+-4,
+-3,
+-3,
+-3,
+-4,
+-3,
+-3,
+-3,
+-3,
+-3,
+-2,
+-3,
+-3,
+-3,
+-2,
+-3,
+-2,
+-3,
+-2,
+-3,
+-2,
+-2,
+-3,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-1,
+-2,
+-2,
+-1,
+-2,
+-2,
+-1,
+-1,
+-2,
+-1,
+-1,
+-1,
+-2,
+-1,
+-1,
+-1,
+-1,
+0,
+-1,
+-1,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+1,
+1,
+0,
+1,
+1,
+1,
+1,
+1,
+2,
+1,
+1,
+1,
+2,
+1,
+2,
+1,
+2,
+1,
+2,
+2,
+1,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+3,
+2,
+2,
+3,
+2,
+3,
+2,
+3,
+2,
+3,
+2,
+3,
+3,
+3,
+3,
+2,
+3,
+3,
+3,
+3,
+3,
+4,
+3,
+3,
+3,
+3,
+4,
+3,
+3,
+4,
+3,
+4,
+3,
+4,
+3,
+4,
+3,
+4,
+4,
+3,
+4,
+4,
+4,
+4,
+3,
+4,
+4,
+4,
+4,
+4,
+4,
+4,
+4,
+4,
+4,
+4,
+4,
+5,
+4,
+4,
+4,
+4,
+5,
+4,
+4,
+4,
+5,
+4,
+4,
+5,
+4,
+4,
+5,
+4,
+5,
+4,
+4,
+5,
+4,
+5,
+4,
+5,
+4,
+4,
+5,
+4,
+5,
+4,
+5,
+4,
+5,
+4,
+5,
+4,
+5,
+4,
+5,
+4,
+5,
+4,
+5,
+4,
+5,
+4,
+5,
+3,
+4,
+5,
+4,
+5,
+4,
+4,
+5,
+4,
+5,
+4,
+4,
+5,
+4,
+4,
+5,
+4,
+4,
+4,
+4,
+5,
+4,
+4,
+4,
+4,
+4,
+5,
+4,
+4,
+4,
+4,
+4,
+4,
+4,
+3,
+4,
+4,
+4,
+4,
+4,
+3,
+4,
+4,
+4,
+3,
+4,
+4,
+3,
+4,
+3,
+4,
+3,
+3,
+4,
+3,
+4,
+3,
+3,
+3,
+4,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+2,
+3,
+3,
+3,
+2,
+3,
+2,
+3,
+2,
+3,
+2,
+3,
+2,
+2,
+3,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+1,
+2,
+2,
+1,
+2,
+1,
+2,
+1,
+1,
+2,
+1,
+1,
+1,
+2,
+1,
+1,
+1,
+1,
+1,
+1,
+0,
+1,
+1,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+-1,
+0,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-2,
+-1,
+-1,
+-2,
+-1,
+-2,
+-1,
+-2,
+-1,
+-2,
+-2,
+-2,
+-1,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-3,
+-2,
+-2,
+-2,
+-3,
+-2,
+-3,
+-2,
+-3,
+-2,
+-3,
+-2,
+-3,
+-2,
+-3,
+-3,
+-3,
+-2,
+-3,
+-3,
+-3,
+-3,
+-2,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-4,
+-3,
+-3,
+-3,
+-3,
+-4,
+-3,
+-3,
+-3,
+-4,
+-3,
+-3,
+-4,
+-3,
+-3,
+-4,
+-3,
+-3,
+-4,
+-3,
+-4,
+-3,
+-4,
+-3,
+-4,
+-3,
+-4,
+-3,
+-4,
+-3,
+-4,
+-3,
+-4,
+-3,
+-4,
+-4,
+-3,
+-4,
+-3,
+-4,
+-4,
+-3,
+-4,
+-3,
+-4,
+-4,
+-3,
+-4,
+-3,
+-4,
+-4,
+-3,
+-4,
+-3,
+-4,
+-3,
+-4,
+-4,
+-3,
+-3,
+-3,
+-4,
+-3,
+-4,
+-4,
+-3,
+-4,
+-3,
+-4,
+-3,
+-4,
+-3,
+-3,
+-4,
+-3,
+-4,
+-3,
+-4,
+-3,
+-3,
+-4,
+-3,
+-3,
+-4,
+-3,
+-3,
+-4,
+-3,
+-3,
+-3,
+-3,
+-4,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-3,
+-2,
+-3,
+-3,
+-3,
+-2,
+-3,
+-3,
+-2,
+-3,
+-2,
+-3,
+-2,
+-3,
+-2,
+-3,
+-2,
+-3,
+-2,
+-2,
+-3,
+-2,
+-2,
+-2,
+-2,
+-2,
+-3,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-1,
+-2,
+-2,
+-2,
+-2,
+-1,
+-2,
+-2,
+-1,
+-2,
+-1,
+-2,
+-1,
+-2,
+-1,
+-2,
+-1,
+-1,
+-2,
+-1,
+-1,
+-1,
+-1,
+-1,
+-2,
+-1,
+-1,
+0,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+0,
+-1,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+1,
+0,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+1,
+0,
+1,
+1,
+1,
+1,
+0,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+2,
+1,
+1,
+1,
+2,
+1,
+1,
+2,
+1,
+1,
+2,
+1,
+2,
+1,
+2,
+1,
+2,
+2,
+1,
+2,
+2,
+2,
+1,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+3,
+2,
+2,
+2,
+3,
+2,
+2,
+3,
+2,
+2,
+3,
+2,
+3,
+2,
+3,
+2,
+3,
+2,
+3,
+2,
+3,
+2,
+3,
+3,
+2,
+3,
+2,
+3,
+3,
+2,
+3,
+3,
+3,
+2,
+3,
+3,
+2,
+3,
+3,
+3,
+3,
+2,
+3,
+3,
+3,
+3,
+2,
+3,
+3,
+3,
+3,
+3,
+2,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+2,
+3,
+3,
+3,
+3,
+3,
+3,
+2,
+3,
+3,
+3,
+3,
+3,
+3,
+2,
+2,
+3,
+3,
+3,
+2,
+3,
+3,
+3,
+3,
+2,
+3,
+3,
+3,
+2,
+3,
+3,
+3,
+2,
+3,
+3,
+2,
+3,
+3,
+2,
+3,
+3,
+2,
+3,
+2,
+3,
+2,
+3,
+2,
+3,
+2,
+3,
+2,
+3,
+2,
+3,
+2,
+2,
+3,
+2,
+2,
+3,
+2,
+2,
+3,
+2,
+2,
+2,
+2,
+2,
+3,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+1,
+2,
+2,
+2,
+2,
+2,
+1,
+2,
+2,
+1,
+2,
+2,
+1,
+2,
+1,
+2,
+1,
+2,
+1,
+2,
+1,
+1,
+2,
+1,
+1,
+2,
+1,
+1,
+1,
+1,
+2,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+0,
+1,
+1,
+1,
+0,
+1,
+1,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+-1,
+0,
+0,
+-1,
+0,
+-1,
+-1,
+0,
+-1,
+0,
+-1,
+-1,
+-1,
+0,
+-1,
+-1,
+-1,
+-1,
+0,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-2,
+-1,
+-1,
+-1,
+-1,
+-2,
+-1,
+-1,
+-1,
+-2,
+-1,
+-1,
+-2,
+-1,
+-2,
+-1,
+-2,
+-1,
+-2,
+-1,
+-2,
+-1,
+-2,
+-1,
+-2,
+-2,
+-1,
+-2,
+-2,
+-1,
+-2,
+-2,
+-2,
+-1,
+-2,
+-2,
+-2,
+-2,
+-1,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-3,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-3,
+-2,
+-2,
+-2,
+-2,
+-3,
+-2,
+-2,
+-2,
+-3,
+-2,
+-2,
+-2,
+-2,
+-3,
+-2,
+-2,
+-2,
+-3,
+-2,
+-2,
+-2,
+-3,
+-2,
+-2,
+-3,
+-2,
+-2,
+-2,
+-3,
+-2,
+-2,
+-2,
+-3,
+-2,
+-2,
+-2,
+-3,
+-1,
+-2,
+-2,
+-2,
+-3,
+-2,
+-2,
+-2,
+-2,
+-3,
+-2,
+-2,
+-2,
+-2,
+-2,
+-3,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-3,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-1,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-1,
+-2,
+-2,
+-2,
+-2,
+-1,
+-2,
+-2,
+-2,
+-1,
+-2,
+-2,
+-1,
+-2,
+-1,
+-2,
+-2,
+-1,
+-2,
+-1,
+-2,
+-1,
+-2,
+-1,
+-2,
+-1,
+-1,
+-2,
+-1,
+-1,
+-2,
+-1,
+-1,
+-2,
+-1,
+-1,
+-1,
+-1,
+-2,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+0,
+-1,
+-1,
+-1,
+-1,
+0,
+-1,
+-1,
+0,
+-1,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+1,
+0,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+1,
+0,
+1,
+1,
+0,
+1,
+1,
+1,
+0,
+1,
+1,
+1,
+1,
+1,
+0,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+2,
+1,
+1,
+1,
+1,
+1,
+1,
+2,
+1,
+1,
+1,
+2,
+1,
+1,
+2,
+1,
+1,
+2,
+1,
+1,
+2,
+1,
+1,
+2,
+1,
+2,
+1,
+2,
+1,
+2,
+1,
+2,
+1,
+2,
+1,
+2,
+1,
+2,
+1,
+2,
+2,
+1,
+2,
+1,
+2,
+2,
+1,
+2,
+2,
+1,
+2,
+2,
+1,
+2,
+2,
+1,
+2,
+2,
+2,
+1,
+2,
+2,
+1,
+2,
+2,
+2,
+1,
+2,
+2,
+2,
+1,
+2,
+2,
+2,
+1,
+2,
+2,
+2,
+2,
+1,
+2,
+2,
+2,
+1,
+2,
+2,
+2,
+1,
+2,
+2,
+2,
+1,
+2,
+1,
+2,
+1,
+2,
+2,
+1,
+2,
+2,
+2,
+1,
+2,
+2,
+1,
+2,
+2,
+1,
+2,
+2,
+1,
+2,
+2,
+1,
+2,
+2,
+1,
+2,
+1,
+2,
+2,
+1,
+2,
+1,
+2,
+1,
+2,
+1,
+2,
+1,
+2,
+1,
+2,
+1,
+2,
+1,
+1,
+2,
+1,
+2,
+1,
+1,
+2,
+1,
+1,
+2,
+1,
+1,
+2,
+1,
+1,
+1,
+2,
+1,
+1,
+1,
+1,
+1,
+2,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+0,
+1,
+1,
+1,
+1,
+0,
+1,
+1,
+1,
+0,
+1,
+1,
+0,
+1,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+0,
+1,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+-1,
+0,
+-1,
+0,
+0,
+-1,
+0,
+-1,
+0,
+0,
+-1,
+0,
+-1,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+-1,
+0,
+-1,
+-1,
+0,
+-1,
+-1,
+0,
+-1,
+-1,
+-1,
+-1,
+0,
+-1,
+-1,
+-1,
+-1,
+0,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-2,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-2,
+-1,
+-1,
+-1,
+-1,
+-2,
+-1,
+-1,
+-1,
+-2,
+-1,
+-1,
+-1,
+-2,
+-1,
+-1,
+-1,
+-2,
+-1,
+-1,
+-2,
+-1,
+-1,
+-2,
+-1,
+-1,
+-1,
+-2,
+-1,
+-1,
+-2,
+-1,
+-1,
+-2,
+-1,
+-2,
+-1,
+-1,
+-2,
+-1,
+-1,
+-2,
+-1,
+-1,
+-2,
+-1,
+-1,
+-2,
+-1,
+-1,
+-2,
+-1,
+-2,
+-1,
+-1,
+-2,
+-1,
+-1,
+-2,
+-1,
+-1,
+-1,
+-1,
+-1,
+-2,
+-1,
+-1,
+-2,
+-1,
+-1,
+-1,
+-2,
+-1,
+-1,
+-2,
+-1,
+-1,
+-1,
+-2,
+-1,
+-1,
+-2,
+-1,
+-1,
+-1,
+-1,
+-2,
+-1,
+-1,
+-1,
+-2,
+-1,
+-1,
+-1,
+-1,
+-1,
+-2,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-2,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+0,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+0,
+-1,
+-1,
+-1,
+-1,
+0,
+-1,
+-1,
+-1,
+0,
+-1,
+-1,
+-1,
+0,
+-1,
+-1,
+0,
+-1,
+0,
+-1,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+1,
+0,
+0,
+1,
+0,
+0,
+1,
+0,
+0,
+1,
+0,
+1,
+0,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+1,
+0,
+1,
+0,
+1,
+1,
+0,
+1,
+0,
+1,
+1,
+0,
+1,
+1,
+1,
+0,
+1,
+1,
+0,
+1,
+1,
+1,
+0,
+1,
+1,
+1,
+1,
+0,
+1,
+1,
+1,
+1,
+1,
+0,
+1,
+1,
+1,
+1,
+1,
+1,
+0,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+0,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+2,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+0,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+0,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+0,
+1,
+1,
+1,
+1,
+1,
+1,
+0,
+1,
+1,
+1,
+1,
+0,
+1,
+1,
+1,
+1,
+0,
+1,
+1,
+1,
+0,
+1,
+1,
+1,
+0,
+1,
+1,
+0,
+1,
+1,
+0,
+1,
+1,
+0,
+1,
+0,
+1,
+1,
+0,
+1,
+0,
+1,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+0,
+1,
+0,
+0,
+1,
+0,
+0,
+1,
+0,
+0,
+1,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+0,
+-1,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+-1,
+0,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+-1,
+0,
+-1,
+-1,
+0,
+-1,
+0,
+-1,
+-1,
+0,
+-1,
+-1,
+0,
+-1,
+-1,
+0,
+-1,
+-1,
+-1,
+0,
+-1,
+-1,
+0,
+-1,
+-1,
+0,
+-1,
+-1,
+-1,
+0,
+-1,
+-1,
+-1,
+0,
+-1,
+-1,
+-1,
+0,
+-1,
+-1,
+-1,
+0,
+-1,
+-1,
+-1,
+0,
+-1,
+-1,
+-1,
+0,
+-1,
+-1,
+-1,
+0,
+-1,
+-1,
+-1,
+-1,
+0,
+-1,
+-1,
+-1,
+0,
+-1,
+-1,
+-1,
+0,
+-1,
+-1,
+-1,
+0,
+-1,
+-1,
+-1,
+0,
+0,
+-1,
+-1,
+0,
+-1,
+-1,
+-1,
+0,
+-1,
+-1,
+-1,
+0,
+-1,
+-1,
+0,
+-1,
+-1,
+-1,
+0,
+-1,
+-1,
+0,
+-1,
+-1,
+0,
+-1,
+-1,
+0,
+-1,
+-1,
+0,
+-1,
+-1,
+0,
+-1,
+-1,
+0,
+-1,
+-1,
+0,
+-1,
+0,
+-1,
+-1,
+0,
+-1,
+0,
+-1,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+0,
+-1,
+0,
+-1,
+0,
+0,
+-1,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+1,
+0,
+0,
+1,
+0,
+0,
+0,
+1,
+0,
+0,
+1,
+0,
+0,
+1,
+0,
+1,
+0,
+0,
+1,
+0,
+0,
+1,
+0,
+1,
+0,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+0,
+1,
+0,
+1,
+0,
+0,
+1,
+0,
+0,
+1,
+0,
+1,
+0,
+0,
+1,
+0,
+0,
+1,
+0,
+0,
+1,
+0,
+0,
+0,
+1,
+0,
+0,
+1,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+-1,
+0,
+0,
+-1,
+0,
+-1,
+0,
+0,
+-1,
+0,
+-1,
+0,
+0,
+-1,
+0,
+-1,
+0,
+0,
+-1,
+0,
+-1,
+0,
+0,
+-1,
+0,
+-1,
+0,
+0,
+-1,
+0,
+-1,
+0,
+0,
+-1,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+-1,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+1,
+0,
+0,
+1,
+0,
+0,
+0,
+1,
+0,
+0,
+1,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+1,
+0,
+0,
+1,
+0,
+0,
+0,
+1,
+0,
+0,
+1,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+1,
+0,
+0,
+1,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0};
Index: pjproject/branches/split-3rd-party/third_party/resample/resample_resample.c
===================================================================
--- pjproject/branches/split-3rd-party/third_party/resample/resample_resample.c	(revision 1175)
+++ pjproject/branches/split-3rd-party/third_party/resample/resample_resample.c	(revision 1175)
@@ -0,0 +1,711 @@
+/* $Id$ */
+/* 
+ * Copyright (C) 2003-2007 Benny Prijono <benny@prijono.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ */
+
+/*
+ * Based on:
+ * resample-1.8.tar.gz from the 
+ * Digital Audio Resampling Home Page located at
+ * http://www-ccrma.stanford.edu/~jos/resample/.
+ *
+ * SOFTWARE FOR SAMPLING-RATE CONVERSION AND FIR DIGITAL FILTER DESIGN
+ *
+ * Snippet from the resample.1 man page:
+ * 
+ * HISTORY
+ *
+ * The first version of this software was written by Julius O. Smith III
+ * <jos@ccrma.stanford.edu> at CCRMA <http://www-ccrma.stanford.edu> in
+ * 1981.  It was called SRCONV and was written in SAIL for PDP-10
+ * compatible machines.  The algorithm was first published in
+ * 
+ * Smith, Julius O. and Phil Gossett. ``A Flexible Sampling-Rate
+ * Conversion Method,'' Proceedings (2): 19.4.1-19.4.4, IEEE Conference
+ * on Acoustics, Speech, and Signal Processing, San Diego, March 1984.
+ * 
+ * An expanded tutorial based on this paper is available at the Digital
+ * Audio Resampling Home Page given above.
+ * 
+ * Circa 1988, the SRCONV program was translated from SAIL to C by
+ * Christopher Lee Fraley working with Roger Dannenberg at CMU.
+ * 
+ * Since then, the C version has been maintained by jos.
+ * 
+ * Sndlib support was added 6/99 by John Gibson <jgg9c@virginia.edu>.
+ * 
+ * The resample program is free software distributed in accordance
+ * with the Lesser GNU Public License (LGPL).  There is NO warranty; not
+ * even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* PJMEDIA modification:
+ *  - remove resample(), just use SrcUp, SrcUD, and SrcLinear directly.
+ *  - move FilterUp() and FilterUD() from filterkit.c
+ *  - move stddefs.h and resample.h to this file.
+ *  - const correctness.
+ */
+#include <pjmedia/resample.h>
+#include <pjmedia/errno.h>
+#include <pj/assert.h>
+#include <pj/log.h>
+#include <pj/pool.h>
+
+
+#define THIS_FILE   "resample.c"
+
+
+/*
+ * Taken from stddefs.h
+ */
+#ifndef PI
+#define PI (3.14159265358979232846)
+#endif
+
+#ifndef PI2
+#define PI2 (6.28318530717958465692)
+#endif
+
+#define D2R (0.01745329348)          /* (2*pi)/360 */
+#define R2D (57.29577951)            /* 360/(2*pi) */
+
+#ifndef MAX
+#define MAX(x,y) ((x)>(y) ?(x):(y))
+#endif
+#ifndef MIN
+#define MIN(x,y) ((x)<(y) ?(x):(y))
+#endif
+
+#ifndef ABS
+#define ABS(x)   ((x)<0   ?(-(x)):(x))
+#endif
+
+#ifndef SGN
+#define SGN(x)   ((x)<0   ?(-1):((x)==0?(0):(1)))
+#endif
+
+typedef char           RES_BOOL;
+typedef short          RES_HWORD;
+typedef int            RES_WORD;
+typedef unsigned short RES_UHWORD;
+typedef unsigned int   RES_UWORD;
+
+#define MAX_HWORD (32767)
+#define MIN_HWORD (-32768)
+
+#ifdef DEBUG
+#define INLINE
+#else
+#define INLINE inline
+#endif
+
+/*
+ * Taken from resample.h
+ *
+ * The configuration constants below govern
+ * the number of bits in the input sample and filter coefficients, the 
+ * number of bits to the right of the binary-point for fixed-point math, etc.
+ *
+ */
+
+/* Conversion constants */
+#define Nhc       8
+#define Na        7
+#define Np       (Nhc+Na)
+#define Npc      (1<<Nhc)
+#define Amask    ((1<<Na)-1)
+#define Pmask    ((1<<Np)-1)
+#define Nh       16
+#define Nb       16
+#define Nhxn     14
+#define Nhg      (Nh-Nhxn)
+#define NLpScl   13
+
+/* Description of constants:
+ *
+ * Npc - is the number of look-up values available for the lowpass filter
+ *    between the beginning of its impulse response and the "cutoff time"
+ *    of the filter.  The cutoff time is defined as the reciprocal of the
+ *    lowpass-filter cut off frequence in Hz.  For example, if the
+ *    lowpass filter were a sinc function, Npc would be the index of the
+ *    impulse-response lookup-table corresponding to the first zero-
+ *    crossing of the sinc function.  (The inverse first zero-crossing
+ *    time of a sinc function equals its nominal cutoff frequency in Hz.)
+ *    Npc must be a power of 2 due to the details of the current
+ *    implementation. The default value of 512 is sufficiently high that
+ *    using linear interpolation to fill in between the table entries
+ *    gives approximately 16-bit accuracy in filter coefficients.
+ *
+ * Nhc - is log base 2 of Npc.
+ *
+ * Na - is the number of bits devoted to linear interpolation of the
+ *    filter coefficients.
+ *
+ * Np - is Na + Nhc, the number of bits to the right of the binary point
+ *    in the integer "time" variable. To the left of the point, it indexes
+ *    the input array (X), and to the right, it is interpreted as a number
+ *    between 0 and 1 sample of the input X.  Np must be less than 16 in
+ *    this implementation.
+ *
+ * Nh - is the number of bits in the filter coefficients. The sum of Nh and
+ *    the number of bits in the input data (typically 16) cannot exceed 32.
+ *    Thus Nh should be 16.  The largest filter coefficient should nearly
+ *    fill 16 bits (32767).
+ *
+ * Nb - is the number of bits in the input data. The sum of Nb and Nh cannot
+ *    exceed 32.
+ *
+ * Nhxn - is the number of bits to right shift after multiplying each input
+ *    sample times a filter coefficient. It can be as great as Nh and as
+ *    small as 0. Nhxn = Nh-2 gives 2 guard bits in the multiply-add
+ *    accumulation.  If Nhxn=0, the accumulation will soon overflow 32 bits.
+ *
+ * Nhg - is the number of guard bits in mpy-add accumulation (equal to Nh-Nhxn)
+ *
+ * NLpScl - is the number of bits allocated to the unity-gain normalization
+ *    factor.  The output of the lowpass filter is multiplied by LpScl and
+ *    then right-shifted NLpScl bits. To avoid overflow, we must have 
+ *    Nb+Nhg+NLpScl < 32.
+ */
+
+
+#ifdef _MSC_VER
+#   pragma warning(push, 3)
+//#   pragma warning(disable: 4245)   // Conversion from uint to ushort
+#   pragma warning(disable: 4244)   // Conversion from double to uint
+#   pragma warning(disable: 4146)   // unary minus operator applied to unsigned type, result still unsigned
+#   pragma warning(disable: 4761)   // integral size mismatch in argument; conversion supplied
+#endif
+
+#if defined(PJMEDIA_HAS_SMALL_FILTER) && PJMEDIA_HAS_SMALL_FILTER!=0
+#   include "smallfilter.h"
+#else
+#   define SMALL_FILTER_NMULT	0
+#   define SMALL_FILTER_SCALE	0
+#   define SMALL_FILTER_NWING	0
+#   define SMALL_FILTER_IMP	NULL
+#   define SMALL_FILTER_IMPD	NULL
+#endif
+
+#if defined(PJMEDIA_HAS_LARGE_FILTER) && PJMEDIA_HAS_LARGE_FILTER!=0
+#   include "largefilter.h"
+#else
+#   define LARGE_FILTER_NMULT	0
+#   define LARGE_FILTER_SCALE	0
+#   define LARGE_FILTER_NWING	0
+#   define LARGE_FILTER_IMP	NULL
+#   define LARGE_FILTER_IMPD	NULL
+#endif
+
+
+#undef INLINE
+#define INLINE
+#define HAVE_FILTER 0    
+
+#ifndef NULL
+#   define NULL	0
+#endif
+
+
+static INLINE RES_HWORD WordToHword(RES_WORD v, int scl)
+{
+    RES_HWORD out;
+    RES_WORD llsb = (1<<(scl-1));
+    v += llsb;		/* round */
+    v >>= scl;
+    if (v>MAX_HWORD) {
+	v = MAX_HWORD;
+    } else if (v < MIN_HWORD) {
+	v = MIN_HWORD;
+    }	
+    out = (RES_HWORD) v;
+    return out;
+}
+
+/* Sampling rate conversion using linear interpolation for maximum speed.
+ */
+static int 
+  SrcLinear(const RES_HWORD X[], RES_HWORD Y[], double pFactor, RES_UHWORD nx)
+{
+    RES_HWORD iconst;
+    RES_UWORD time = 0;
+    const RES_HWORD *xp;
+    RES_HWORD *Ystart, *Yend;
+    RES_WORD v,x1,x2;
+    
+    double dt;                  /* Step through input signal */ 
+    RES_UWORD dtb;                  /* Fixed-point version of Dt */
+    RES_UWORD endTime;              /* When time reaches EndTime, return to user */
+    
+    dt = 1.0/pFactor;            /* Output sampling period */
+    dtb = dt*(1<<Np) + 0.5;     /* Fixed-point representation */
+    
+    Ystart = Y;
+    Yend = Ystart + (unsigned)(nx * pFactor);
+    endTime = time + (1<<Np)*(RES_WORD)nx;
+    while (time < endTime)
+    {
+	iconst = (time) & Pmask;
+	xp = &X[(time)>>Np];      /* Ptr to current input sample */
+	x1 = *xp++;
+	x2 = *xp;
+	x1 *= ((1<<Np)-iconst);
+	x2 *= iconst;
+	v = x1 + x2;
+	*Y++ = WordToHword(v,Np);   /* Deposit output */
+	time += dtb;		    /* Move to next sample by time increment */
+    }
+    return (Y - Ystart);            /* Return number of output samples */
+}
+
+static RES_WORD FilterUp(const RES_HWORD Imp[], const RES_HWORD ImpD[], 
+		     RES_UHWORD Nwing, RES_BOOL Interp,
+		     const RES_HWORD *Xp, RES_HWORD Ph, RES_HWORD Inc)
+{
+    const RES_HWORD *Hp;
+    const RES_HWORD *Hdp = NULL;
+    const RES_HWORD *End;
+    RES_HWORD a = 0;
+    RES_WORD v, t;
+    
+    v=0;
+    Hp = &Imp[Ph>>Na];
+    End = &Imp[Nwing];
+    if (Interp) {
+	Hdp = &ImpD[Ph>>Na];
+	a = Ph & Amask;
+    }
+    if (Inc == 1)		/* If doing right wing...              */
+    {				/* ...drop extra coeff, so when Ph is  */
+	End--;			/*    0.5, we don't do too many mult's */
+	if (Ph == 0)		/* If the phase is zero...           */
+	{			/* ...then we've already skipped the */
+	    Hp += Npc;		/*    first sample, so we must also  */
+	    Hdp += Npc;		/*    skip ahead in Imp[] and ImpD[] */
+	}
+    }
+    if (Interp)
+      while (Hp < End) {
+	  t = *Hp;		/* Get filter coeff */
+	  t += (((RES_WORD)*Hdp)*a)>>Na; /* t is now interp'd filter coeff */
+	  Hdp += Npc;		/* Filter coeff differences step */
+	  t *= *Xp;		/* Mult coeff by input sample */
+	  if (t & (1<<(Nhxn-1)))  /* Round, if needed */
+	    t += (1<<(Nhxn-1));
+	  t >>= Nhxn;		/* Leave some guard bits, but come back some */
+	  v += t;			/* The filter output */
+	  Hp += Npc;		/* Filter coeff step */
+
+	  Xp += Inc;		/* Input signal step. NO CHECK ON BOUNDS */
+      } 
+    else 
+      while (Hp < End) {
+	  t = *Hp;		/* Get filter coeff */
+	  t *= *Xp;		/* Mult coeff by input sample */
+	  if (t & (1<<(Nhxn-1)))  /* Round, if needed */
+	    t += (1<<(Nhxn-1));
+	  t >>= Nhxn;		/* Leave some guard bits, but come back some */
+	  v += t;			/* The filter output */
+	  Hp += Npc;		/* Filter coeff step */
+	  Xp += Inc;		/* Input signal step. NO CHECK ON BOUNDS */
+      }
+    return(v);
+}
+
+
+static RES_WORD FilterUD(const RES_HWORD Imp[], const RES_HWORD ImpD[],
+		     RES_UHWORD Nwing, RES_BOOL Interp,
+		     const RES_HWORD *Xp, RES_HWORD Ph, RES_HWORD Inc, RES_UHWORD dhb)
+{
+    RES_HWORD a;
+    const RES_HWORD *Hp, *Hdp, *End;
+    RES_WORD v, t;
+    RES_UWORD Ho;
+    
+    v=0;
+    Ho = (Ph*(RES_UWORD)dhb)>>Np;
+    End = &Imp[Nwing];
+    if (Inc == 1)		/* If doing right wing...              */
+    {				/* ...drop extra coeff, so when Ph is  */
+	End--;			/*    0.5, we don't do too many mult's */
+	if (Ph == 0)		/* If the phase is zero...           */
+	  Ho += dhb;		/* ...then we've already skipped the */
+    }				/*    first sample, so we must also  */
+				/*    skip ahead in Imp[] and ImpD[] */
+    if (Interp)
+      while ((Hp = &Imp[Ho>>Na]) < End) {
+	  t = *Hp;		/* Get IR sample */
+	  Hdp = &ImpD[Ho>>Na];  /* get interp (lower Na) bits from diff table*/
+	  a = Ho & Amask;	/* a is logically between 0 and 1 */
+	  t += (((RES_WORD)*Hdp)*a)>>Na; /* t is now interp'd filter coeff */
+	  t *= *Xp;		/* Mult coeff by input sample */
+	  if (t & 1<<(Nhxn-1))	/* Round, if needed */
+	    t += 1<<(Nhxn-1);
+	  t >>= Nhxn;		/* Leave some guard bits, but come back some */
+	  v += t;			/* The filter output */
+	  Ho += dhb;		/* IR step */
+	  Xp += Inc;		/* Input signal step. NO CHECK ON BOUNDS */
+      }
+    else 
+      while ((Hp = &Imp[Ho>>Na]) < End) {
+	  t = *Hp;		/* Get IR sample */
+	  t *= *Xp;		/* Mult coeff by input sample */
+	  if (t & 1<<(Nhxn-1))	/* Round, if needed */
+	    t += 1<<(Nhxn-1);
+	  t >>= Nhxn;		/* Leave some guard bits, but come back some */
+	  v += t;			/* The filter output */
+	  Ho += dhb;		/* IR step */
+	  Xp += Inc;		/* Input signal step. NO CHECK ON BOUNDS */
+      }
+    return(v);
+}
+
+/* Sampling rate up-conversion only subroutine;
+ * Slightly faster than down-conversion;
+ */
+static int SrcUp(const RES_HWORD X[], RES_HWORD Y[], double pFactor, 
+		 RES_UHWORD nx, RES_UHWORD pNwing, RES_UHWORD pLpScl,
+		 const RES_HWORD pImp[], const RES_HWORD pImpD[], RES_BOOL Interp)
+{
+    const RES_HWORD *xp;
+    RES_HWORD *Ystart, *Yend;
+    RES_WORD v;
+    
+    double dt;                  /* Step through input signal */ 
+    RES_UWORD dtb;                  /* Fixed-point version of Dt */
+    RES_UWORD time = 0;
+    RES_UWORD endTime;              /* When time reaches EndTime, return to user */
+    
+    dt = 1.0/pFactor;            /* Output sampling period */
+    dtb = dt*(1<<Np) + 0.5;     /* Fixed-point representation */
+    
+    Ystart = Y;
+    Yend = Ystart + (unsigned)(nx * pFactor);
+    endTime = time + (1<<Np)*(RES_WORD)nx;
+    while (time < endTime)
+    {
+	xp = &X[time>>Np];      /* Ptr to current input sample */
+	/* Perform left-wing inner product */
+	v = 0;
+	v = FilterUp(pImp, pImpD, pNwing, Interp, xp, (RES_HWORD)(time&Pmask),-1);
+
+	/* Perform right-wing inner product */
+	v += FilterUp(pImp, pImpD, pNwing, Interp, xp+1,  (RES_HWORD)((-time)&Pmask),1);
+
+	v >>= Nhg;		/* Make guard bits */
+	v *= pLpScl;		/* Normalize for unity filter gain */
+	*Y++ = WordToHword(v,NLpScl);   /* strip guard bits, deposit output */
+	time += dtb;		/* Move to next sample by time increment */
+    }
+    return (Y - Ystart);        /* Return the number of output samples */
+}
+
+
+/* Sampling rate conversion subroutine */
+
+static int SrcUD(const RES_HWORD X[], RES_HWORD Y[], double pFactor, 
+		 RES_UHWORD nx, RES_UHWORD pNwing, RES_UHWORD pLpScl,
+		 const RES_HWORD pImp[], const RES_HWORD pImpD[], RES_BOOL Interp)
+{
+    const RES_HWORD *xp;
+    RES_HWORD *Ystart, *Yend;
+    RES_WORD v;
+    
+    double dh;                  /* Step through filter impulse response */
+    double dt;                  /* Step through input signal */
+    RES_UWORD time = 0;
+    RES_UWORD endTime;          /* When time reaches EndTime, return to user */
+    RES_UWORD dhb, dtb;         /* Fixed-point versions of Dh,Dt */
+    
+    dt = 1.0/pFactor;            /* Output sampling period */
+    dtb = dt*(1<<Np) + 0.5;     /* Fixed-point representation */
+    
+    dh = MIN(Npc, pFactor*Npc);  /* Filter sampling period */
+    dhb = dh*(1<<Na) + 0.5;     /* Fixed-point representation */
+    
+    Ystart = Y;
+    Yend = Ystart + (unsigned)(nx * pFactor);
+    endTime = time + (1<<Np)*(RES_WORD)nx;
+    while (time < endTime)
+    {
+	xp = &X[time>>Np];	/* Ptr to current input sample */
+	v = FilterUD(pImp, pImpD, pNwing, Interp, xp, (RES_HWORD)(time&Pmask),
+		     -1, dhb);	/* Perform left-wing inner product */
+	v += FilterUD(pImp, pImpD, pNwing, Interp, xp+1, (RES_HWORD)((-time)&Pmask),
+		      1, dhb);	/* Perform right-wing inner product */
+	v >>= Nhg;		/* Make guard bits */
+	v *= pLpScl;		/* Normalize for unity filter gain */
+	*Y++ = WordToHword(v,NLpScl);   /* strip guard bits, deposit output */
+	time += dtb;		/* Move to next sample by time increment */
+    }
+    return (Y - Ystart);        /* Return the number of output samples */
+}
+
+
+/* ***************************************************************************
+ *
+ * PJMEDIA RESAMPLE 
+ *
+ * ***************************************************************************
+ */
+
+struct pjmedia_resample
+{
+    double	 factor;	/* Conversion factor = rate_out / rate_in.  */
+    pj_bool_t	 large_filter;	/* Large filter?			    */
+    pj_bool_t	 high_quality;	/* Not fast?				    */
+    unsigned	 xoff;		/* History and lookahead size, in samples   */
+    unsigned	 frame_size;	/* Samples per frame.			    */
+    pj_int16_t	*buffer;	/* Input buffer.			    */
+};
+
+
+PJ_DEF(pj_status_t) pjmedia_resample_create( pj_pool_t *pool,
+					     pj_bool_t high_quality,
+					     pj_bool_t large_filter,
+					     unsigned channel_count,
+					     unsigned rate_in,
+					     unsigned rate_out,
+					     unsigned samples_per_frame,
+					     pjmedia_resample **p_resample)
+{
+    pjmedia_resample *resample;
+
+    PJ_ASSERT_RETURN(pool && p_resample && rate_in &&
+		     rate_out && samples_per_frame, PJ_EINVAL);
+
+    resample = pj_pool_alloc(pool, sizeof(pjmedia_resample));
+    PJ_ASSERT_RETURN(resample, PJ_ENOMEM);
+
+    PJ_UNUSED_ARG(channel_count);
+
+    /*
+     * If we're downsampling, always use the fast algorithm since it seems
+     * to yield the same quality.
+     */
+    if (rate_out < rate_in) {
+	//no this is not a good idea. It sounds pretty good with speech,
+	//but very poor with background noise etc.
+	//high_quality = 0;
+    }
+
+#if !defined(PJMEDIA_HAS_LARGE_FILTER) || PJMEDIA_HAS_LARGE_FILTER==0
+    /*
+     * If large filter is excluded in the build, then prevent application
+     * from using it.
+     */
+    if (high_quality && large_filter) {
+	large_filter = PJ_FALSE;
+	PJ_LOG(5,(THIS_FILE, 
+		  "Resample uses small filter because large filter is "
+		  "disabled"));
+    }
+#endif
+
+#if !defined(PJMEDIA_HAS_SMALL_FILTER) || PJMEDIA_HAS_SMALL_FILTER==0
+    /*
+     * If small filter is excluded in the build and application wants to
+     * use it, then drop to linear conversion.
+     */
+    if (high_quality && large_filter == 0) {
+	high_quality = PJ_FALSE;
+	PJ_LOG(4,(THIS_FILE, 
+		  "Resample uses linear because small filter is disabled"));
+    }
+#endif
+
+    resample->factor = rate_out * 1.0 / rate_in;
+    resample->large_filter = large_filter;
+    resample->high_quality = high_quality;
+    resample->frame_size = samples_per_frame;
+
+    if (high_quality) {
+	unsigned size;
+
+	/* This is a bug in xoff calculation, thanks Stephane Lussier
+	 * of Macadamian dot com.
+	 *   resample->xoff = large_filter ? 32 : 6;
+	 */
+	if (large_filter)
+	    resample->xoff = (LARGE_FILTER_NMULT + 1) / 2.0  *  
+			     MAX(1.0, 1.0/resample->factor);
+	else
+	    resample->xoff = (SMALL_FILTER_NMULT + 1) / 2.0  *  
+			     MAX(1.0, 1.0/resample->factor);
+
+
+	size = (samples_per_frame + 2*resample->xoff) * sizeof(pj_int16_t);
+	resample->buffer = pj_pool_alloc(pool, size);
+	PJ_ASSERT_RETURN(resample->buffer, PJ_ENOMEM);
+
+	pjmedia_zero_samples(resample->buffer, resample->xoff*2);
+
+
+    } else {
+	resample->xoff = 0;
+    }
+
+    *p_resample = resample;
+
+    PJ_LOG(5,(THIS_FILE, "resample created: %s qualiy, %s filter, in/out "
+			  "rate=%d/%d", 
+			  (high_quality?"high":"low"),
+			  (large_filter?"large":"small"),
+			  rate_in, rate_out));
+    return PJ_SUCCESS;
+}
+
+
+
+PJ_DEF(void) pjmedia_resample_run( pjmedia_resample *resample,
+				   const pj_int16_t *input,
+				   pj_int16_t *output )
+{
+    PJ_ASSERT_ON_FAIL(resample, return);
+
+    if (resample->high_quality) {
+	pj_int16_t *dst_buf;
+	const pj_int16_t *src_buf;
+
+	/* Okay chaps, here's how we do resampling.
+	 *
+	 * The original resample algorithm requires xoff samples *before* the
+	 * input buffer as history, and another xoff samples *after* the
+	 * end of the input buffer as lookahead. Since application can only
+	 * supply framesize buffer on each run, PJMEDIA needs to arrange the
+	 * buffer to meet these requirements.
+	 *
+	 * So here comes the trick.
+	 *
+	 * First of all, because of the history and lookahead requirement, 
+	 * resample->buffer need to accomodate framesize+2*xoff samples in its
+	 * buffer. This is done when the buffer is created.
+	 *
+	 * On the first run, the input frame (supplied by application) is
+	 * copied to resample->buffer at 2*xoff position. The first 2*xoff
+	 * samples are initially zeroed (in the initialization). The resample
+	 * algorithm then invoked at resample->buffer+xoff ONLY, thus giving
+	 * it one xoff at the beginning as zero, and one xoff at the end
+	 * as the end of the original input. The resample algorithm will see
+	 * that the first xoff samples in the input as zero.
+	 *
+	 * So here's the layout of resample->buffer on the first run.
+	 *
+	 * run 0 
+	 *     +------+------+--------------+
+	 *     | 0000 | 0000 |  frame0...   |
+	 *     +------+------+--------------+
+	 *     ^      ^      ^              ^
+         *     0    xoff  2*xoff       size+2*xoff 
+         *
+	 * (Note again: resample algorithm is called at resample->buffer+xoff)
+	 *
+	 * At the end of the run, 2*xoff samples from the end of 
+	 * resample->buffer are copied to the beginning of resample->buffer.
+	 * The first xoff part of this will be used as history for the next
+	 * run, and the second xoff part of this is actually the start of
+	 * resampling for the next run.
+	 *
+	 * And the first run completes, the function returns.
+	 *
+	 * 
+	 * On the next run, the input frame supplied by application is again
+	 * copied at 2*xoff position in the resample->buffer, and the 
+	 * resample algorithm is again invoked at resample->buffer+xoff 
+	 * position. So effectively, the resample algorithm will start its
+	 * operation on the last xoff from the previous frame, and gets the
+	 * history from the last 2*xoff of the previous frame, and the look-
+	 * ahead from the last xoff of current frame.
+	 *
+	 * So on this run, the buffer layout is:
+	 *
+	 * run 1
+	 *     +------+------+--------------+
+	 *     | frm0 | frm0 |  frame1...   |
+	 *     +------+------+--------------+
+	 *     ^      ^      ^              ^
+         *     0    xoff  2*xoff       size+2*xoff 
+	 *
+	 * As you can see from above diagram, the resampling algorithm is
+	 * actually called from the last xoff part of previous frame (frm0).
+	 *
+	 * And so on the process continues for the next frame, and the next,
+	 * and the next, ...
+	 *
+	 */
+	dst_buf = resample->buffer + resample->xoff*2;
+	pjmedia_copy_samples(dst_buf, input, resample->frame_size);
+	    
+	if (resample->factor >= 1) {
+
+	    if (resample->large_filter) {
+		SrcUp(resample->buffer + resample->xoff, output,
+		      resample->factor, resample->frame_size,
+		      LARGE_FILTER_NWING, LARGE_FILTER_SCALE,
+		      LARGE_FILTER_IMP, LARGE_FILTER_IMPD,
+		      PJ_TRUE);
+	    } else {
+		SrcUp(resample->buffer + resample->xoff, output,
+		      resample->factor, resample->frame_size,
+		      SMALL_FILTER_NWING, SMALL_FILTER_SCALE,
+		      SMALL_FILTER_IMP, SMALL_FILTER_IMPD,
+		      PJ_TRUE);
+	    }
+
+	} else {
+
+	    if (resample->large_filter) {
+
+		SrcUD( resample->buffer + resample->xoff, output,
+		       resample->factor, resample->frame_size,
+		       LARGE_FILTER_NWING, 
+		       LARGE_FILTER_SCALE * resample->factor + 0.5,
+		       LARGE_FILTER_IMP, LARGE_FILTER_IMPD,
+		       PJ_TRUE);
+
+	    } else {
+
+		SrcUD( resample->buffer + resample->xoff, output,
+		       resample->factor, resample->frame_size,
+		       SMALL_FILTER_NWING, 
+		       SMALL_FILTER_SCALE * resample->factor + 0.5,
+		       SMALL_FILTER_IMP, SMALL_FILTER_IMPD,
+		       PJ_TRUE);
+
+	    }
+
+	}
+
+	dst_buf = resample->buffer;
+	src_buf = input + resample->frame_size - resample->xoff*2;
+	pjmedia_copy_samples(dst_buf, src_buf, resample->xoff * 2);
+
+    } else {
+	SrcLinear( input, output, resample->factor, resample->frame_size);
+    }
+}
+
+PJ_DEF(unsigned) pjmedia_resample_get_input_size(pjmedia_resample *resample)
+{
+    PJ_ASSERT_RETURN(resample != NULL, 0);
+    return resample->frame_size;
+}
+
+PJ_DEF(void) pjmedia_resample_destroy(pjmedia_resample *resample)
+{
+    PJ_UNUSED_ARG(resample);
+}
Index: pjproject/branches/split-3rd-party/third_party/resample/smallfilter.h
===================================================================
--- pjproject/branches/split-3rd-party/third_party/resample/smallfilter.h	(revision 1175)
+++ pjproject/branches/split-3rd-party/third_party/resample/smallfilter.h	(revision 1175)
@@ -0,0 +1,4617 @@
+/* Included by resamplesubs.c */
+#define SMALL_FILTER_NMULT ((RES_HWORD)13)
+#define SMALL_FILTER_SCALE 13128 /* Unity-gain scale factor */
+#define SMALL_FILTER_NWING 1536 /* Filter table length */
+static const RES_HWORD SMALL_FILTER_IMP[] /* Impulse response */ = {
+32767,
+32766,
+32764,
+32760,
+32755,
+32749,
+32741,
+32731,
+32721,
+32708,
+32695,
+32679,
+32663,
+32645,
+32625,
+32604,
+32582,
+32558,
+32533,
+32506,
+32478,
+32448,
+32417,
+32385,
+32351,
+32316,
+32279,
+32241,
+32202,
+32161,
+32119,
+32075,
+32030,
+31984,
+31936,
+31887,
+31836,
+31784,
+31731,
+31676,
+31620,
+31563,
+31504,
+31444,
+31383,
+31320,
+31256,
+31191,
+31124,
+31056,
+30987,
+30916,
+30845,
+30771,
+30697,
+30621,
+30544,
+30466,
+30387,
+30306,
+30224,
+30141,
+30057,
+29971,
+29884,
+29796,
+29707,
+29617,
+29525,
+29433,
+29339,
+29244,
+29148,
+29050,
+28952,
+28852,
+28752,
+28650,
+28547,
+28443,
+28338,
+28232,
+28125,
+28017,
+27908,
+27797,
+27686,
+27574,
+27461,
+27346,
+27231,
+27115,
+26998,
+26879,
+26760,
+26640,
+26519,
+26398,
+26275,
+26151,
+26027,
+25901,
+25775,
+25648,
+25520,
+25391,
+25262,
+25131,
+25000,
+24868,
+24735,
+24602,
+24467,
+24332,
+24197,
+24060,
+23923,
+23785,
+23647,
+23507,
+23368,
+23227,
+23086,
+22944,
+22802,
+22659,
+22515,
+22371,
+22226,
+22081,
+21935,
+21789,
+21642,
+21494,
+21346,
+21198,
+21049,
+20900,
+20750,
+20600,
+20449,
+20298,
+20146,
+19995,
+19842,
+19690,
+19537,
+19383,
+19230,
+19076,
+18922,
+18767,
+18612,
+18457,
+18302,
+18146,
+17990,
+17834,
+17678,
+17521,
+17365,
+17208,
+17051,
+16894,
+16737,
+16579,
+16422,
+16264,
+16106,
+15949,
+15791,
+15633,
+15475,
+15317,
+15159,
+15001,
+14843,
+14685,
+14527,
+14369,
+14212,
+14054,
+13896,
+13739,
+13581,
+13424,
+13266,
+13109,
+12952,
+12795,
+12639,
+12482,
+12326,
+12170,
+12014,
+11858,
+11703,
+11548,
+11393,
+11238,
+11084,
+10929,
+10776,
+10622,
+10469,
+10316,
+10164,
+10011,
+9860,
+9708,
+9557,
+9407,
+9256,
+9106,
+8957,
+8808,
+8659,
+8511,
+8364,
+8216,
+8070,
+7924,
+7778,
+7633,
+7488,
+7344,
+7200,
+7057,
+6914,
+6773,
+6631,
+6490,
+6350,
+6210,
+6071,
+5933,
+5795,
+5658,
+5521,
+5385,
+5250,
+5115,
+4981,
+4848,
+4716,
+4584,
+4452,
+4322,
+4192,
+4063,
+3935,
+3807,
+3680,
+3554,
+3429,
+3304,
+3180,
+3057,
+2935,
+2813,
+2692,
+2572,
+2453,
+2335,
+2217,
+2101,
+1985,
+1870,
+1755,
+1642,
+1529,
+1418,
+1307,
+1197,
+1088,
+979,
+872,
+765,
+660,
+555,
+451,
+348,
+246,
+145,
+44,
+-54,
+-153,
+-250,
+-347,
+-443,
+-537,
+-631,
+-724,
+-816,
+-908,
+-998,
+-1087,
+-1175,
+-1263,
+-1349,
+-1435,
+-1519,
+-1603,
+-1685,
+-1767,
+-1848,
+-1928,
+-2006,
+-2084,
+-2161,
+-2237,
+-2312,
+-2386,
+-2459,
+-2531,
+-2603,
+-2673,
+-2742,
+-2810,
+-2878,
+-2944,
+-3009,
+-3074,
+-3137,
+-3200,
+-3261,
+-3322,
+-3381,
+-3440,
+-3498,
+-3554,
+-3610,
+-3665,
+-3719,
+-3772,
+-3824,
+-3875,
+-3925,
+-3974,
+-4022,
+-4069,
+-4116,
+-4161,
+-4205,
+-4249,
+-4291,
+-4333,
+-4374,
+-4413,
+-4452,
+-4490,
+-4527,
+-4563,
+-4599,
+-4633,
+-4666,
+-4699,
+-4730,
+-4761,
+-4791,
+-4820,
+-4848,
+-4875,
+-4901,
+-4926,
+-4951,
+-4974,
+-4997,
+-5019,
+-5040,
+-5060,
+-5080,
+-5098,
+-5116,
+-5133,
+-5149,
+-5164,
+-5178,
+-5192,
+-5205,
+-5217,
+-5228,
+-5238,
+-5248,
+-5257,
+-5265,
+-5272,
+-5278,
+-5284,
+-5289,
+-5293,
+-5297,
+-5299,
+-5301,
+-5303,
+-5303,
+-5303,
+-5302,
+-5300,
+-5298,
+-5295,
+-5291,
+-5287,
+-5282,
+-5276,
+-5270,
+-5263,
+-5255,
+-5246,
+-5237,
+-5228,
+-5217,
+-5206,
+-5195,
+-5183,
+-5170,
+-5157,
+-5143,
+-5128,
+-5113,
+-5097,
+-5081,
+-5064,
+-5047,
+-5029,
+-5010,
+-4991,
+-4972,
+-4952,
+-4931,
+-4910,
+-4889,
+-4867,
+-4844,
+-4821,
+-4797,
+-4774,
+-4749,
+-4724,
+-4699,
+-4673,
+-4647,
+-4620,
+-4593,
+-4566,
+-4538,
+-4510,
+-4481,
+-4452,
+-4422,
+-4393,
+-4363,
+-4332,
+-4301,
+-4270,
+-4238,
+-4206,
+-4174,
+-4142,
+-4109,
+-4076,
+-4042,
+-4009,
+-3975,
+-3940,
+-3906,
+-3871,
+-3836,
+-3801,
+-3765,
+-3729,
+-3693,
+-3657,
+-3620,
+-3584,
+-3547,
+-3510,
+-3472,
+-3435,
+-3397,
+-3360,
+-3322,
+-3283,
+-3245,
+-3207,
+-3168,
+-3129,
+-3091,
+-3052,
+-3013,
+-2973,
+-2934,
+-2895,
+-2855,
+-2816,
+-2776,
+-2736,
+-2697,
+-2657,
+-2617,
+-2577,
+-2537,
+-2497,
+-2457,
+-2417,
+-2377,
+-2337,
+-2297,
+-2256,
+-2216,
+-2176,
+-2136,
+-2096,
+-2056,
+-2016,
+-1976,
+-1936,
+-1896,
+-1856,
+-1817,
+-1777,
+-1737,
+-1698,
+-1658,
+-1619,
+-1579,
+-1540,
+-1501,
+-1462,
+-1423,
+-1384,
+-1345,
+-1306,
+-1268,
+-1230,
+-1191,
+-1153,
+-1115,
+-1077,
+-1040,
+-1002,
+-965,
+-927,
+-890,
+-854,
+-817,
+-780,
+-744,
+-708,
+-672,
+-636,
+-600,
+-565,
+-530,
+-494,
+-460,
+-425,
+-391,
+-356,
+-322,
+-289,
+-255,
+-222,
+-189,
+-156,
+-123,
+-91,
+-59,
+-27,
+4,
+35,
+66,
+97,
+127,
+158,
+188,
+218,
+247,
+277,
+306,
+334,
+363,
+391,
+419,
+447,
+474,
+501,
+528,
+554,
+581,
+606,
+632,
+657,
+683,
+707,
+732,
+756,
+780,
+803,
+827,
+850,
+872,
+895,
+917,
+939,
+960,
+981,
+1002,
+1023,
+1043,
+1063,
+1082,
+1102,
+1121,
+1139,
+1158,
+1176,
+1194,
+1211,
+1228,
+1245,
+1262,
+1278,
+1294,
+1309,
+1325,
+1340,
+1354,
+1369,
+1383,
+1397,
+1410,
+1423,
+1436,
+1448,
+1461,
+1473,
+1484,
+1496,
+1507,
+1517,
+1528,
+1538,
+1548,
+1557,
+1566,
+1575,
+1584,
+1592,
+1600,
+1608,
+1616,
+1623,
+1630,
+1636,
+1643,
+1649,
+1654,
+1660,
+1665,
+1670,
+1675,
+1679,
+1683,
+1687,
+1690,
+1694,
+1697,
+1700,
+1702,
+1704,
+1706,
+1708,
+1709,
+1711,
+1712,
+1712,
+1713,
+1713,
+1713,
+1713,
+1712,
+1711,
+1710,
+1709,
+1708,
+1706,
+1704,
+1702,
+1700,
+1697,
+1694,
+1691,
+1688,
+1685,
+1681,
+1677,
+1673,
+1669,
+1664,
+1660,
+1655,
+1650,
+1644,
+1639,
+1633,
+1627,
+1621,
+1615,
+1609,
+1602,
+1596,
+1589,
+1582,
+1575,
+1567,
+1560,
+1552,
+1544,
+1536,
+1528,
+1520,
+1511,
+1503,
+1494,
+1485,
+1476,
+1467,
+1458,
+1448,
+1439,
+1429,
+1419,
+1409,
+1399,
+1389,
+1379,
+1368,
+1358,
+1347,
+1337,
+1326,
+1315,
+1304,
+1293,
+1282,
+1271,
+1260,
+1248,
+1237,
+1225,
+1213,
+1202,
+1190,
+1178,
+1166,
+1154,
+1142,
+1130,
+1118,
+1106,
+1094,
+1081,
+1069,
+1057,
+1044,
+1032,
+1019,
+1007,
+994,
+981,
+969,
+956,
+943,
+931,
+918,
+905,
+892,
+879,
+867,
+854,
+841,
+828,
+815,
+802,
+790,
+777,
+764,
+751,
+738,
+725,
+713,
+700,
+687,
+674,
+662,
+649,
+636,
+623,
+611,
+598,
+585,
+573,
+560,
+548,
+535,
+523,
+510,
+498,
+486,
+473,
+461,
+449,
+437,
+425,
+413,
+401,
+389,
+377,
+365,
+353,
+341,
+330,
+318,
+307,
+295,
+284,
+272,
+261,
+250,
+239,
+228,
+217,
+206,
+195,
+184,
+173,
+163,
+152,
+141,
+131,
+121,
+110,
+100,
+90,
+80,
+70,
+60,
+51,
+41,
+31,
+22,
+12,
+3,
+-5,
+-14,
+-23,
+-32,
+-41,
+-50,
+-59,
+-67,
+-76,
+-84,
+-93,
+-101,
+-109,
+-117,
+-125,
+-133,
+-140,
+-148,
+-156,
+-163,
+-170,
+-178,
+-185,
+-192,
+-199,
+-206,
+-212,
+-219,
+-226,
+-232,
+-239,
+-245,
+-251,
+-257,
+-263,
+-269,
+-275,
+-280,
+-286,
+-291,
+-297,
+-302,
+-307,
+-312,
+-317,
+-322,
+-327,
+-332,
+-336,
+-341,
+-345,
+-349,
+-354,
+-358,
+-362,
+-366,
+-369,
+-373,
+-377,
+-380,
+-384,
+-387,
+-390,
+-394,
+-397,
+-400,
+-402,
+-405,
+-408,
+-411,
+-413,
+-416,
+-418,
+-420,
+-422,
+-424,
+-426,
+-428,
+-430,
+-432,
+-433,
+-435,
+-436,
+-438,
+-439,
+-440,
+-442,
+-443,
+-444,
+-445,
+-445,
+-446,
+-447,
+-447,
+-448,
+-448,
+-449,
+-449,
+-449,
+-449,
+-449,
+-449,
+-449,
+-449,
+-449,
+-449,
+-449,
+-448,
+-448,
+-447,
+-447,
+-446,
+-445,
+-444,
+-443,
+-443,
+-442,
+-441,
+-440,
+-438,
+-437,
+-436,
+-435,
+-433,
+-432,
+-430,
+-429,
+-427,
+-426,
+-424,
+-422,
+-420,
+-419,
+-417,
+-415,
+-413,
+-411,
+-409,
+-407,
+-405,
+-403,
+-400,
+-398,
+-396,
+-393,
+-391,
+-389,
+-386,
+-384,
+-381,
+-379,
+-376,
+-374,
+-371,
+-368,
+-366,
+-363,
+-360,
+-357,
+-355,
+-352,
+-349,
+-346,
+-343,
+-340,
+-337,
+-334,
+-331,
+-328,
+-325,
+-322,
+-319,
+-316,
+-313,
+-310,
+-307,
+-304,
+-301,
+-298,
+-294,
+-291,
+-288,
+-285,
+-282,
+-278,
+-275,
+-272,
+-269,
+-265,
+-262,
+-259,
+-256,
+-252,
+-249,
+-246,
+-243,
+-239,
+-236,
+-233,
+-230,
+-226,
+-223,
+-220,
+-217,
+-213,
+-210,
+-207,
+-204,
+-200,
+-197,
+-194,
+-191,
+-187,
+-184,
+-181,
+-178,
+-175,
+-172,
+-168,
+-165,
+-162,
+-159,
+-156,
+-153,
+-150,
+-147,
+-143,
+-140,
+-137,
+-134,
+-131,
+-128,
+-125,
+-122,
+-120,
+-117,
+-114,
+-111,
+-108,
+-105,
+-102,
+-99,
+-97,
+-94,
+-91,
+-88,
+-86,
+-83,
+-80,
+-78,
+-75,
+-72,
+-70,
+-67,
+-65,
+-62,
+-59,
+-57,
+-55,
+-52,
+-50,
+-47,
+-45,
+-43,
+-40,
+-38,
+-36,
+-33,
+-31,
+-29,
+-27,
+-25,
+-22,
+-20,
+-18,
+-16,
+-14,
+-12,
+-10,
+-8,
+-6,
+-4,
+-2,
+0,
+0,
+2,
+4,
+6,
+8,
+9,
+11,
+13,
+14,
+16,
+17,
+19,
+21,
+22,
+24,
+25,
+27,
+28,
+29,
+31,
+32,
+33,
+35,
+36,
+37,
+38,
+40,
+41,
+42,
+43,
+44,
+45,
+46,
+47,
+48,
+49,
+50,
+51,
+52,
+53,
+54,
+55,
+56,
+56,
+57,
+58,
+59,
+59,
+60,
+61,
+62,
+62,
+63,
+63,
+64,
+64,
+65,
+66,
+66,
+66,
+67,
+67,
+68,
+68,
+69,
+69,
+69,
+70,
+70,
+70,
+70,
+71,
+71,
+71,
+71,
+71,
+72,
+72,
+72,
+72,
+72,
+72,
+72,
+72,
+72,
+72,
+72,
+72,
+72,
+72,
+72,
+72,
+72,
+72,
+72,
+72,
+72,
+72,
+72,
+71,
+71,
+71,
+71,
+71,
+70,
+70,
+70,
+70,
+69,
+69,
+69,
+69,
+68,
+68,
+68,
+67,
+67,
+67,
+66,
+66,
+66,
+65,
+65,
+64,
+64,
+64,
+63,
+63,
+62,
+62,
+62,
+61,
+61,
+60,
+60,
+59,
+59,
+58,
+58,
+58,
+57,
+57,
+56,
+56,
+55,
+55,
+54,
+54,
+53,
+53,
+52,
+52,
+51,
+51,
+50,
+50,
+49,
+48,
+48,
+47,
+47,
+46,
+46,
+45,
+45,
+44,
+44,
+43,
+43,
+42,
+42,
+41,
+41,
+40,
+39,
+39,
+38,
+38,
+37,
+37,
+36,
+36,
+35,
+35,
+34,
+34,
+33,
+33,
+32,
+32,
+31,
+31,
+30,
+30,
+29,
+29,
+28,
+28,
+27,
+27,
+26,
+26,
+25,
+25,
+24,
+24,
+23,
+23,
+23,
+22,
+22,
+21,
+21,
+20,
+20,
+20,
+19,
+19,
+18,
+18,
+17,
+17,
+17,
+16,
+16,
+15,
+15,
+15,
+14,
+14,
+14,
+13,
+13,
+12,
+12,
+12,
+11,
+11,
+11,
+10,
+10,
+10,
+9,
+9,
+9,
+9,
+8,
+8,
+8,
+7,
+7,
+7,
+7,
+6,
+6,
+6,
+6,
+5,
+5,
+5,
+5,
+4,
+4,
+4,
+4,
+3,
+3,
+3,
+3,
+3,
+2,
+2,
+2,
+2,
+2,
+1,
+1,
+1,
+1,
+1,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1,
+-1
+};
+
+static const RES_HWORD SMALL_FILTER_IMPD[] = {
+-1,
+-2,
+-4,
+-5,
+-6,
+-8,
+-10,
+-10,
+-13,
+-13,
+-16,
+-16,
+-18,
+-20,
+-21,
+-22,
+-24,
+-25,
+-27,
+-28,
+-30,
+-31,
+-32,
+-34,
+-35,
+-37,
+-38,
+-39,
+-41,
+-42,
+-44,
+-45,
+-46,
+-48,
+-49,
+-51,
+-52,
+-53,
+-55,
+-56,
+-57,
+-59,
+-60,
+-61,
+-63,
+-64,
+-65,
+-67,
+-68,
+-69,
+-71,
+-71,
+-74,
+-74,
+-76,
+-77,
+-78,
+-79,
+-81,
+-82,
+-83,
+-84,
+-86,
+-87,
+-88,
+-89,
+-90,
+-92,
+-92,
+-94,
+-95,
+-96,
+-98,
+-98,
+-100,
+-100,
+-102,
+-103,
+-104,
+-105,
+-106,
+-107,
+-108,
+-109,
+-111,
+-111,
+-112,
+-113,
+-115,
+-115,
+-116,
+-117,
+-119,
+-119,
+-120,
+-121,
+-121,
+-123,
+-124,
+-124,
+-126,
+-126,
+-127,
+-128,
+-129,
+-129,
+-131,
+-131,
+-132,
+-133,
+-133,
+-135,
+-135,
+-135,
+-137,
+-137,
+-138,
+-138,
+-140,
+-139,
+-141,
+-141,
+-142,
+-142,
+-143,
+-144,
+-144,
+-145,
+-145,
+-146,
+-146,
+-147,
+-148,
+-148,
+-148,
+-149,
+-149,
+-150,
+-150,
+-151,
+-151,
+-152,
+-151,
+-153,
+-152,
+-153,
+-154,
+-153,
+-154,
+-154,
+-155,
+-155,
+-155,
+-155,
+-156,
+-156,
+-156,
+-156,
+-157,
+-156,
+-157,
+-157,
+-157,
+-157,
+-158,
+-157,
+-158,
+-158,
+-157,
+-158,
+-158,
+-158,
+-158,
+-158,
+-158,
+-158,
+-158,
+-158,
+-158,
+-157,
+-158,
+-158,
+-157,
+-158,
+-157,
+-158,
+-157,
+-157,
+-157,
+-156,
+-157,
+-156,
+-156,
+-156,
+-156,
+-155,
+-155,
+-155,
+-155,
+-154,
+-155,
+-153,
+-154,
+-153,
+-153,
+-152,
+-153,
+-151,
+-152,
+-151,
+-150,
+-151,
+-150,
+-149,
+-149,
+-149,
+-148,
+-147,
+-148,
+-146,
+-146,
+-146,
+-145,
+-145,
+-144,
+-144,
+-143,
+-143,
+-141,
+-142,
+-141,
+-140,
+-140,
+-139,
+-138,
+-138,
+-137,
+-137,
+-136,
+-135,
+-135,
+-134,
+-133,
+-132,
+-132,
+-132,
+-130,
+-130,
+-129,
+-128,
+-128,
+-127,
+-126,
+-125,
+-125,
+-124,
+-123,
+-122,
+-122,
+-121,
+-120,
+-119,
+-118,
+-118,
+-116,
+-116,
+-115,
+-115,
+-113,
+-113,
+-111,
+-111,
+-110,
+-109,
+-109,
+-107,
+-107,
+-105,
+-105,
+-104,
+-103,
+-102,
+-101,
+-101,
+-98,
+-99,
+-97,
+-97,
+-96,
+-94,
+-94,
+-93,
+-92,
+-92,
+-90,
+-89,
+-88,
+-88,
+-86,
+-86,
+-84,
+-84,
+-82,
+-82,
+-81,
+-80,
+-78,
+-78,
+-77,
+-76,
+-75,
+-74,
+-73,
+-72,
+-72,
+-70,
+-69,
+-68,
+-68,
+-66,
+-65,
+-65,
+-63,
+-63,
+-61,
+-61,
+-59,
+-59,
+-58,
+-56,
+-56,
+-55,
+-54,
+-53,
+-52,
+-51,
+-50,
+-49,
+-48,
+-47,
+-47,
+-45,
+-44,
+-44,
+-42,
+-42,
+-41,
+-39,
+-39,
+-38,
+-37,
+-36,
+-36,
+-34,
+-33,
+-33,
+-31,
+-31,
+-30,
+-29,
+-28,
+-27,
+-26,
+-25,
+-25,
+-23,
+-23,
+-22,
+-21,
+-20,
+-20,
+-18,
+-18,
+-17,
+-16,
+-15,
+-14,
+-14,
+-13,
+-12,
+-11,
+-10,
+-10,
+-9,
+-8,
+-7,
+-6,
+-6,
+-5,
+-4,
+-4,
+-2,
+-2,
+-2,
+0,
+0,
+1,
+2,
+2,
+3,
+4,
+4,
+5,
+6,
+6,
+7,
+8,
+9,
+9,
+9,
+11,
+11,
+11,
+12,
+13,
+13,
+14,
+15,
+15,
+16,
+16,
+17,
+17,
+18,
+19,
+19,
+19,
+20,
+21,
+21,
+21,
+22,
+23,
+23,
+24,
+23,
+25,
+25,
+25,
+26,
+26,
+27,
+27,
+27,
+28,
+28,
+29,
+29,
+30,
+29,
+30,
+31,
+31,
+31,
+32,
+32,
+32,
+32,
+33,
+33,
+34,
+33,
+34,
+35,
+34,
+35,
+35,
+35,
+36,
+36,
+36,
+36,
+37,
+36,
+37,
+37,
+38,
+37,
+38,
+37,
+38,
+39,
+38,
+38,
+39,
+39,
+38,
+39,
+39,
+40,
+39,
+39,
+40,
+39,
+40,
+40,
+39,
+40,
+40,
+40,
+40,
+40,
+40,
+40,
+40,
+40,
+40,
+41,
+40,
+40,
+40,
+40,
+40,
+40,
+40,
+40,
+40,
+40,
+39,
+40,
+40,
+39,
+40,
+39,
+40,
+39,
+39,
+39,
+39,
+39,
+39,
+39,
+38,
+38,
+39,
+38,
+38,
+38,
+37,
+38,
+37,
+38,
+37,
+36,
+37,
+37,
+36,
+36,
+36,
+36,
+36,
+35,
+35,
+36,
+34,
+35,
+34,
+35,
+34,
+33,
+34,
+33,
+33,
+33,
+33,
+32,
+32,
+32,
+31,
+31,
+31,
+31,
+30,
+31,
+30,
+30,
+29,
+30,
+29,
+28,
+29,
+28,
+28,
+28,
+27,
+27,
+27,
+26,
+27,
+25,
+26,
+25,
+26,
+24,
+25,
+24,
+24,
+23,
+24,
+23,
+22,
+23,
+22,
+22,
+21,
+21,
+21,
+21,
+20,
+20,
+19,
+20,
+19,
+18,
+19,
+18,
+18,
+17,
+17,
+17,
+17,
+16,
+16,
+15,
+16,
+15,
+14,
+15,
+14,
+14,
+13,
+13,
+13,
+12,
+13,
+12,
+11,
+12,
+11,
+10,
+11,
+10,
+10,
+9,
+9,
+9,
+9,
+8,
+8,
+8,
+8,
+7,
+7,
+6,
+7,
+6,
+5,
+6,
+5,
+5,
+5,
+4,
+4,
+4,
+3,
+4,
+3,
+3,
+2,
+2,
+2,
+2,
+1,
+2,
+1,
+0,
+1,
+0,
+0,
+0,
+-1,
+-1,
+-1,
+-1,
+-1,
+-2,
+-2,
+-2,
+-2,
+-3,
+-3,
+-3,
+-3,
+-3,
+-4,
+-4,
+-4,
+-4,
+-5,
+-4,
+-5,
+-5,
+-6,
+-5,
+-6,
+-6,
+-6,
+-6,
+-6,
+-7,
+-6,
+-7,
+-7,
+-7,
+-8,
+-7,
+-8,
+-8,
+-8,
+-8,
+-8,
+-9,
+-8,
+-9,
+-9,
+-9,
+-9,
+-9,
+-10,
+-9,
+-10,
+-10,
+-10,
+-10,
+-10,
+-10,
+-11,
+-10,
+-11,
+-10,
+-11,
+-11,
+-11,
+-11,
+-11,
+-11,
+-11,
+-12,
+-11,
+-12,
+-12,
+-11,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-13,
+-12,
+-12,
+-13,
+-12,
+-13,
+-12,
+-13,
+-13,
+-12,
+-13,
+-13,
+-12,
+-13,
+-13,
+-13,
+-13,
+-12,
+-13,
+-13,
+-13,
+-13,
+-13,
+-12,
+-13,
+-13,
+-13,
+-13,
+-13,
+-12,
+-13,
+-13,
+-13,
+-12,
+-13,
+-13,
+-13,
+-12,
+-13,
+-13,
+-12,
+-13,
+-12,
+-13,
+-12,
+-13,
+-12,
+-12,
+-13,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-11,
+-12,
+-11,
+-12,
+-11,
+-12,
+-11,
+-11,
+-11,
+-11,
+-11,
+-11,
+-11,
+-11,
+-11,
+-10,
+-11,
+-11,
+-10,
+-10,
+-11,
+-10,
+-10,
+-10,
+-10,
+-10,
+-9,
+-10,
+-10,
+-9,
+-10,
+-9,
+-8,
+-9,
+-9,
+-9,
+-9,
+-9,
+-9,
+-8,
+-9,
+-8,
+-9,
+-8,
+-8,
+-8,
+-8,
+-8,
+-7,
+-8,
+-8,
+-7,
+-7,
+-8,
+-7,
+-7,
+-7,
+-7,
+-6,
+-7,
+-7,
+-6,
+-7,
+-6,
+-6,
+-6,
+-6,
+-6,
+-6,
+-5,
+-6,
+-5,
+-6,
+-5,
+-5,
+-5,
+-5,
+-5,
+-5,
+-5,
+-4,
+-5,
+-4,
+-4,
+-5,
+-4,
+-4,
+-4,
+-3,
+-4,
+-4,
+-3,
+-4,
+-3,
+-3,
+-4,
+-3,
+-3,
+-2,
+-3,
+-3,
+-3,
+-2,
+-3,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-1,
+-2,
+-1,
+-2,
+-1,
+-1,
+-2,
+-1,
+-1,
+-1,
+0,
+-1,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+1,
+0,
+1,
+1,
+1,
+1,
+0,
+1,
+1,
+1,
+2,
+1,
+1,
+1,
+2,
+1,
+2,
+1,
+2,
+1,
+2,
+2,
+2,
+1,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+3,
+2,
+2,
+3,
+2,
+2,
+3,
+2,
+3,
+2,
+3,
+2,
+3,
+3,
+2,
+3,
+3,
+3,
+2,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+4,
+3,
+3,
+3,
+3,
+4,
+3,
+3,
+3,
+4,
+3,
+3,
+3,
+4,
+3,
+3,
+3,
+4,
+3,
+3,
+3,
+4,
+3,
+3,
+3,
+4,
+3,
+3,
+3,
+4,
+3,
+3,
+3,
+4,
+3,
+3,
+3,
+3,
+3,
+4,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+4,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+2,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+2,
+3,
+3,
+3,
+2,
+3,
+3,
+2,
+3,
+3,
+2,
+3,
+2,
+3,
+3,
+2,
+2,
+3,
+2,
+3,
+2,
+2,
+3,
+2,
+2,
+3,
+2,
+2,
+2,
+2,
+3,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+0,
+2,
+2,
+2,
+2,
+1,
+2,
+2,
+1,
+2,
+1,
+2,
+2,
+1,
+2,
+1,
+2,
+1,
+1,
+2,
+1,
+1,
+2,
+1,
+1,
+1,
+2,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+0,
+1,
+1,
+1,
+0,
+1,
+1,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+1,
+0,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+0,
+1,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+-1,
+0,
+0,
+-1,
+0,
+-1,
+0,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+0,
+-1,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+-1,
+-2,
+-4,
+-5,
+-6,
+-8,
+-10,
+-10,
+-13,
+-13,
+-16,
+-16,
+-18,
+-20,
+-21,
+-22,
+-24,
+-25,
+-27,
+-28,
+-30,
+-31,
+-32,
+-34,
+-35,
+-37,
+-38,
+-39,
+-41,
+-42,
+-44,
+-45,
+-46,
+-48,
+-49,
+-51,
+-52,
+-53,
+-55,
+-56,
+-57,
+-59,
+-60,
+-61,
+-63,
+-64,
+-65,
+-67,
+-68,
+-69,
+-71,
+-71,
+-74,
+-74,
+-76,
+-77,
+-78,
+-79,
+-81,
+-82,
+-83,
+-84,
+-86,
+-87,
+-88,
+-89,
+-90,
+-92,
+-92,
+-94,
+-95,
+-96,
+-98,
+-98,
+-100,
+-100,
+-102,
+-103,
+-104,
+-105,
+-106,
+-107,
+-108,
+-109,
+-111,
+-111,
+-112,
+-113,
+-115,
+-115,
+-116,
+-117,
+-119,
+-119,
+-120,
+-121,
+-121,
+-123,
+-124,
+-124,
+-126,
+-126,
+-127,
+-128,
+-129,
+-129,
+-131,
+-131,
+-132,
+-133,
+-133,
+-135,
+-135,
+-135,
+-137,
+-137,
+-138,
+-138,
+-140,
+-139,
+-141,
+-141,
+-142,
+-142,
+-143,
+-144,
+-144,
+-145,
+-145,
+-146,
+-146,
+-147,
+-148,
+-148,
+-148,
+-149,
+-149,
+-150,
+-150,
+-151,
+-151,
+-152,
+-151,
+-153,
+-152,
+-153,
+-154,
+-153,
+-154,
+-154,
+-155,
+-155,
+-155,
+-155,
+-156,
+-156,
+-156,
+-156,
+-157,
+-156,
+-157,
+-157,
+-157,
+-157,
+-158,
+-157,
+-158,
+-158,
+-157,
+-158,
+-158,
+-158,
+-158,
+-158,
+-158,
+-158,
+-158,
+-158,
+-158,
+-157,
+-158,
+-158,
+-157,
+-158,
+-157,
+-158,
+-157,
+-157,
+-157,
+-156,
+-157,
+-156,
+-156,
+-156,
+-156,
+-155,
+-155,
+-155,
+-155,
+-154,
+-155,
+-153,
+-154,
+-153,
+-153,
+-152,
+-153,
+-151,
+-152,
+-151,
+-150,
+-151,
+-150,
+-149,
+-149,
+-149,
+-148,
+-147,
+-148,
+-146,
+-146,
+-146,
+-145,
+-145,
+-144,
+-144,
+-143,
+-143,
+-141,
+-142,
+-141,
+-140,
+-140,
+-139,
+-138,
+-138,
+-137,
+-137,
+-136,
+-135,
+-135,
+-134,
+-133,
+-132,
+-132,
+-132,
+-130,
+-130,
+-129,
+-128,
+-128,
+-127,
+-126,
+-125,
+-125,
+-124,
+-123,
+-122,
+-122,
+-121,
+-120,
+-119,
+-118,
+-118,
+-116,
+-116,
+-115,
+-115,
+-113,
+-113,
+-111,
+-111,
+-110,
+-109,
+-109,
+-107,
+-107,
+-105,
+-105,
+-104,
+-103,
+-102,
+-101,
+-101,
+-98,
+-99,
+-97,
+-97,
+-96,
+-94,
+-94,
+-93,
+-92,
+-92,
+-90,
+-89,
+-88,
+-88,
+-86,
+-86,
+-84,
+-84,
+-82,
+-82,
+-81,
+-80,
+-78,
+-78,
+-77,
+-76,
+-75,
+-74,
+-73,
+-72,
+-72,
+-70,
+-69,
+-68,
+-68,
+-66,
+-65,
+-65,
+-63,
+-63,
+-61,
+-61,
+-59,
+-59,
+-58,
+-56,
+-56,
+-55,
+-54,
+-53,
+-52,
+-51,
+-50,
+-49,
+-48,
+-47,
+-47,
+-45,
+-44,
+-44,
+-42,
+-42,
+-41,
+-39,
+-39,
+-38,
+-37,
+-36,
+-36,
+-34,
+-33,
+-33,
+-31,
+-31,
+-30,
+-29,
+-28,
+-27,
+-26,
+-25,
+-25,
+-23,
+-23,
+-22,
+-21,
+-20,
+-20,
+-18,
+-18,
+-17,
+-16,
+-15,
+-14,
+-14,
+-13,
+-12,
+-11,
+-10,
+-10,
+-9,
+-8,
+-7,
+-6,
+-6,
+-5,
+-4,
+-4,
+-2,
+-2,
+-2,
+0,
+0,
+1,
+2,
+2,
+3,
+4,
+4,
+5,
+6,
+6,
+7,
+8,
+9,
+9,
+9,
+11,
+11,
+11,
+12,
+13,
+13,
+14,
+15,
+15,
+16,
+16,
+17,
+17,
+18,
+19,
+19,
+19,
+20,
+21,
+21,
+21,
+22,
+23,
+23,
+24,
+23,
+25,
+25,
+25,
+26,
+26,
+27,
+27,
+27,
+28,
+28,
+29,
+29,
+30,
+29,
+30,
+31,
+31,
+31,
+32,
+32,
+32,
+32,
+33,
+33,
+34,
+33,
+34,
+35,
+34,
+35,
+35,
+35,
+36,
+36,
+36,
+36,
+37,
+36,
+37,
+37,
+38,
+37,
+38,
+37,
+38,
+39,
+38,
+38,
+39,
+39,
+38,
+39,
+39,
+40,
+39,
+39,
+40,
+39,
+40,
+40,
+39,
+40,
+40,
+40,
+40,
+40,
+40,
+40,
+40,
+40,
+40,
+41,
+40,
+40,
+40,
+40,
+40,
+40,
+40,
+40,
+40,
+40,
+39,
+40,
+40,
+39,
+40,
+39,
+40,
+39,
+39,
+39,
+39,
+39,
+39,
+39,
+38,
+38,
+39,
+38,
+38,
+38,
+37,
+38,
+37,
+38,
+37,
+36,
+37,
+37,
+36,
+36,
+36,
+36,
+36,
+35,
+35,
+36,
+34,
+35,
+34,
+35,
+34,
+33,
+34,
+33,
+33,
+33,
+33,
+32,
+32,
+32,
+31,
+31,
+31,
+31,
+30,
+31,
+30,
+30,
+29,
+30,
+29,
+28,
+29,
+28,
+28,
+28,
+27,
+27,
+27,
+26,
+27,
+25,
+26,
+25,
+26,
+24,
+25,
+24,
+24,
+23,
+24,
+23,
+22,
+23,
+22,
+22,
+21,
+21,
+21,
+21,
+20,
+20,
+19,
+20,
+19,
+18,
+19,
+18,
+18,
+17,
+17,
+17,
+17,
+16,
+16,
+15,
+16,
+15,
+14,
+15,
+14,
+14,
+13,
+13,
+13,
+12,
+13,
+12,
+11,
+12,
+11,
+10,
+11,
+10,
+10,
+9,
+9,
+9,
+9,
+8,
+8,
+8,
+8,
+7,
+7,
+6,
+7,
+6,
+5,
+6,
+5,
+5,
+5,
+4,
+4,
+4,
+3,
+4,
+3,
+3,
+2,
+2,
+2,
+2,
+1,
+2,
+1,
+0,
+1,
+0,
+0,
+0,
+-1,
+-1,
+-1,
+-1,
+-1,
+-2,
+-2,
+-2,
+-2,
+-3,
+-3,
+-3,
+-3,
+-3,
+-4,
+-4,
+-4,
+-4,
+-5,
+-4,
+-5,
+-5,
+-6,
+-5,
+-6,
+-6,
+-6,
+-6,
+-6,
+-7,
+-6,
+-7,
+-7,
+-7,
+-8,
+-7,
+-8,
+-8,
+-8,
+-8,
+-8,
+-9,
+-8,
+-9,
+-9,
+-9,
+-9,
+-9,
+-10,
+-9,
+-10,
+-10,
+-10,
+-10,
+-10,
+-10,
+-11,
+-10,
+-11,
+-10,
+-11,
+-11,
+-11,
+-11,
+-11,
+-11,
+-11,
+-12,
+-11,
+-12,
+-12,
+-11,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-13,
+-12,
+-12,
+-13,
+-12,
+-13,
+-12,
+-13,
+-13,
+-12,
+-13,
+-13,
+-12,
+-13,
+-13,
+-13,
+-13,
+-12,
+-13,
+-13,
+-13,
+-13,
+-13,
+-12,
+-13,
+-13,
+-13,
+-13,
+-13,
+-12,
+-13,
+-13,
+-13,
+-12,
+-13,
+-13,
+-13,
+-12,
+-13,
+-13,
+-12,
+-13,
+-12,
+-13,
+-12,
+-13,
+-12,
+-12,
+-13,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-12,
+-11,
+-12,
+-11,
+-12,
+-11,
+-12,
+-11,
+-11,
+-11,
+-11,
+-11,
+-11,
+-11,
+-11,
+-11,
+-10,
+-11,
+-11,
+-10,
+-10,
+-11,
+-10,
+-10,
+-10,
+-10,
+-10,
+-9,
+-10,
+-10,
+-9,
+-10,
+-9,
+-8,
+-9,
+-9,
+-9,
+-9,
+-9,
+-9,
+-8,
+-9,
+-8,
+-9,
+-8,
+-8,
+-8,
+-8,
+-8,
+-7,
+-8,
+-8,
+-7,
+-7,
+-8,
+-7,
+-7,
+-7,
+-7,
+-6,
+-7,
+-7,
+-6,
+-7,
+-6,
+-6,
+-6,
+-6,
+-6,
+-6,
+-5,
+-6,
+-5,
+-6,
+-5,
+-5,
+-5,
+-5,
+-5,
+-5,
+-5,
+-4,
+-5,
+-4,
+-4,
+-5,
+-4,
+-4,
+-4,
+-3,
+-4,
+-4,
+-3,
+-4,
+-3,
+-3,
+-4,
+-3,
+-3,
+-2,
+-3,
+-3,
+-3,
+-2,
+-3,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-2,
+-1,
+-2,
+-1,
+-2,
+-1,
+-1,
+-2,
+-1,
+-1,
+-1,
+0,
+-1,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+1,
+0,
+1,
+1,
+1,
+1,
+0,
+1,
+1,
+1,
+2,
+1,
+1,
+1,
+2,
+1,
+2,
+1,
+2,
+1,
+2,
+2,
+2,
+1,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+3,
+2,
+2,
+3,
+2,
+2,
+3,
+2,
+3,
+2,
+3,
+2,
+3,
+3,
+2,
+3,
+3,
+3,
+2,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+4,
+3,
+3,
+3,
+3,
+4,
+3,
+3,
+3,
+4,
+3,
+3,
+3,
+4,
+3,
+3,
+3,
+4,
+3,
+3,
+3,
+4,
+3,
+3,
+3,
+4,
+3,
+3,
+3,
+4,
+3,
+3,
+3,
+4,
+3,
+3,
+3,
+3,
+3,
+4,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+4,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+2,
+3,
+3,
+3,
+3,
+3,
+3,
+3,
+2,
+3,
+3,
+3,
+2,
+3,
+3,
+2,
+3,
+3,
+2,
+3,
+2,
+3,
+3,
+2,
+2,
+3,
+2,
+3,
+2,
+2,
+3,
+2,
+2,
+3,
+2,
+2,
+2,
+2,
+3,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+2,
+0,
+2,
+2,
+2,
+2,
+1,
+2,
+2,
+1,
+2,
+1,
+2,
+2,
+1,
+2,
+1,
+2,
+1,
+1,
+2,
+1,
+1,
+2,
+1,
+1,
+1,
+2,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+1,
+0,
+1,
+1,
+1,
+0,
+1,
+1,
+1,
+0,
+1,
+0,
+1,
+0,
+1,
+1,
+0,
+0,
+1,
+0,
+1,
+0,
+1,
+0,
+0,
+1,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+-1,
+0,
+0,
+-1,
+0,
+-1,
+0,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+0,
+-1,
+0,
+-1,
+0,
+-1,
+0,
+0,
+-1,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+0,
+-1,
+0,
+0,
+-1,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+-1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+1
+};
