60806040525f60045f6101000a81548160ff021916908315150217905550600a600555624c4b4060065534801562000035575f80fd5b5060015f819055506200005d620000516200016c60201b60201c565b6200017360201b60201c565b5f60028190555060025460075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060025460095f600a5481526020019081526020015f205f8073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503373ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6002546040516200015e919062000250565b60405180910390a36200026b565b5f33905090565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f819050919050565b6200024a8162000236565b82525050565b5f602082019050620002655f8301846200023f565b92915050565b6151de80620002795f395ff3fe608060405260043610610203575f3560e01c8063715018a611610117578063be74264d1161009f578063dd62ed3e1161006e578063dd62ed3e146106cd578063eaf98d2314610709578063ee7d72b414610733578063ef3359de1461075b578063f2fde38b1461078357610203565b8063be74264d14610633578063cd047ba41461065d578063d0e30db014610699578063d28d8852146106a357610203565b80639711715a116100e65780639711715a14610565578063a9059cbb1461057b578063ac500509146105b7578063b09f1266146105f3578063b33712c51461061d57610203565b8063715018a6146104d35780637ce3489b146104e95780638da5cb5b1461051157806395d89b411461053b57610203565b80632e1a7d4d1161019a57806340c10f191161016957806340c10f1914610419578063439766ce1461044157806354dd1da41461045757806361374cf71461046d57806370a082311461049757610203565b80632e1a7d4d14610375578063313ce5671461039d57806332424aa3146103c75780633bed33ce146103f157610203565b80631a93d1c3116101d65780631a93d1c3146102bf5780631bf0b08b146102e95780631fbe2ee01461031157806323b872dd1461033957610203565b806306fdde0314610207578063095ea7b314610231578063146101561461026d57806318160ddd14610295575b5f80fd5b348015610212575f80fd5b5061021b6107ab565b6040516102289190613457565b60405180910390f35b34801561023c575f80fd5b5061025760048036038101906102529190613508565b6107e8565b6040516102649190613560565b60405180910390f35b348015610278575f80fd5b50610293600480360381019061028e91906135a3565b610905565b005b3480156102a0575f80fd5b506102a9610929565b6040516102b691906135dd565b60405180910390f35b3480156102ca575f80fd5b506102d3610932565b6040516102e091906135dd565b60405180910390f35b3480156102f4575f80fd5b5061030f600480360381019061030a91906135f6565b61093b565b005b34801561031c575f80fd5b506103376004803603810190610332919061366d565b610b86565b005b348015610344575f80fd5b5061035f600480360381019061035a91906136ab565b610cba565b60405161036c9190613560565b60405180910390f35b348015610380575f80fd5b5061039b600480360381019061039691906136fb565b61100f565b005b3480156103a8575f80fd5b506103b16112f4565b6040516103be9190613741565b60405180910390f35b3480156103d2575f80fd5b506103db6112f8565b6040516103e89190613741565b60405180910390f35b3480156103fc575f80fd5b50610417600480360381019061041291906136fb565b6112fc565b005b348015610424575f80fd5b5061043f600480360381019061043a9190613508565b61138e565b005b34801561044c575f80fd5b50610455611580565b005b348015610462575f80fd5b5061046b61161f565b005b348015610478575f80fd5b50610481611ab4565b60405161048e9190613560565b60405180910390f35b3480156104a2575f80fd5b506104bd60048036038101906104b8919061375a565b611ac9565b6040516104ca91906135dd565b60405180910390f35b3480156104de575f80fd5b506104e7611bde565b005b3480156104f4575f80fd5b5061050f600480360381019061050a91906136fb565b611bf1565b005b34801561051c575f80fd5b50610525611c3c565b6040516105329190613794565b60405180910390f35b348015610546575f80fd5b5061054f611c64565b60405161055c9190613457565b60405180910390f35b348015610570575f80fd5b50610579611ca1565b005b348015610586575f80fd5b506105a1600480360381019061059c9190613508565b611e17565b6040516105ae9190613560565b60405180910390f35b3480156105c2575f80fd5b506105dd60048036038101906105d891906137ad565b611fb4565b6040516105ea9190613560565b60405180910390f35b3480156105fe575f80fd5b506106076120ef565b6040516106149190613457565b60405180910390f35b348015610628575f80fd5b50610631612128565b005b34801561063e575f80fd5b506106476121c5565b60405161065491906135dd565b60405180910390f35b348015610668575f80fd5b50610683600480360381019061067e9190613508565b6121ce565b60405161069091906135dd565b60405180910390f35b6106a16122ff565b005b3480156106ae575f80fd5b506106b761256e565b6040516106c49190613457565b60405180910390f35b3480156106d8575f80fd5b506106f360048036038101906106ee91906137fd565b6125a7565b60405161070091906135dd565b60405180910390f35b348015610714575f80fd5b5061071d612705565b60405161072a91906135dd565b60405180910390f35b34801561073e575f80fd5b50610759600480360381019061075491906136fb565b61270b565b005b348015610766575f80fd5b50610781600480360381019061077c91906136fb565b612756565b005b34801561078e575f80fd5b506107a960048036038101906107a4919061375a565b612844565b005b60606040518060400160405280601981526020017f444f4920506c757320496e63656e746976657320546f6b656e00000000000000815250905090565b5f6107f16128c6565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361085f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610856906138ab565b60405180910390fd5b5f8060ff16146108a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089b90613939565b60405180910390fd5b60018210156108e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108df906139c7565b60405180910390fd5b6108f3338484612913565b600190506108ff612b1a565b92915050565b61090d612b23565b8060045f6101000a81548160ff02191690831515021790555050565b5f600254905090565b5f600654905090565b610943612b23565b600654805a1015610989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098090613a2f565b60405180910390fd5b5f600c5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015414610a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0190613a97565b60405180910390fd5b428511610a4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390613b25565b60405180910390fd5b5f8211610a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8590613bb3565b60405180910390fd5b5f6040518060a001604052808781526020018681526020018581526020018481526020015f815250905080600c5f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f820151815f0155602082015181600101556040820151816002015560608201518160030155608082015181600401559050508673ffffffffffffffffffffffffffffffffffffffff167f47d46f58c7d60d60571092cff5715b8c8c5bc1347db2bb9890e639bf3680ba7b87878787604051610b759493929190613bd1565b60405180910390a250505050505050565b806003548111610bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc290613c5e565b60405180910390fd5b80600381905550600654805a1015610c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0f90613a2f565b60405180910390fd5b600b5f9054906101000a900460ff1615610c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5e90613cec565b60405180910390fd5b6001841015610cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca290613d7a565b60405180910390fd5b610cb48461100f565b50505050565b5f610cc36128c6565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2890613e08565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9690613e96565b60405180910390fd5b8160075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015610e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1690613f24565b60405180910390fd5b8160085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015610eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed190613fb2565b60405180910390fd5b5f8060ff1614610f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1690613939565b60405180910390fd5b6001821015610f63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5a90614040565b60405180910390fd5b610f6e848484612ba1565b610ffc84338460085f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610ff7919061408b565b612913565b60019050611008612b1a565b9392505050565b6110176128c6565b600654805a101561105d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105490613a2f565b60405180910390fd5b600b5f9054906101000a900460ff16156110ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a390613cec565b60405180910390fd5b8160075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054101561112c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111239061412e565b60405180910390fd5b6001821015611170576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611167906141bc565b60405180910390fd5b8160075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546111bc919061408b565b925050819055508160025f8282546111d4919061408b565b925050819055508160095f600a5481526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611238919061408b565b925050819055505f73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161129c91906135dd565b60405180910390a33373ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f193505050501580156112e7573d5f803e3d5ffd5b50506112f1612b1a565b50565b5f90565b5f81565b611304612b23565b47811115611347576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133e90614224565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561138a573d5f803e3d5ffd5b5050565b611396612b23565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fb906142b2565b60405180910390fd5b6001811015611448576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143f9061431a565b60405180910390fd5b8060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546114949190614338565b925050819055508060025f8282546114ac9190614338565b925050819055508060095f600a5481526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546115109190614338565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161157491906135dd565b60405180910390a35050565b611588612b23565b600b5f9054906101000a900460ff16156115d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ce906143b5565b60405180910390fd5b6001600b5f6101000a81548160ff0219169083151502179055507fab35696f06e428ebc5ceba8cd17f8fed287baf43440206d1943af1ee53e6d26760405160405180910390a1565b6116276128c6565b600654805a101561166d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166490613a2f565b60405180910390fd5b5f600c5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f815f0154116116f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e990614443565b60405180910390fd5b61170c8160010154825f015461320490919063ffffffff16565b42101561174e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611745906144d1565b60405180910390fd5b5f4290505f611799836040518060a00160405290815f820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152505083613219565b90505f81116117dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d49061455f565b60405180910390fd5b5f8360040154826117ee919061408b565b90508184600401819055508060075f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015611879576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187090614224565b60405180910390fd5b60075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548160075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546119009190614338565b1015611941576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611938906145c7565b60405180910390fd5b8060075f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461198d919061408b565b925050819055508060075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546119e09190614338565b925050819055503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611a4491906135dd565b60405180910390a33373ffffffffffffffffffffffffffffffffffffffff167f6bc5063c7239b75c8bf325a2a2238f726fada322163996bb6c93d5594fb119f082604051611a9291906135dd565b60405180910390a2611aa5303383612ba1565b5050505050611ab2612b1a565b565b5f60045f9054906101000a900460ff16905090565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2f90614655565b60405180910390fd5b5f60095f600a5481526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f8111611bd45760075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611bd6565b805b915050919050565b611be6612b23565b611bef5f6132c4565b565b611bf9612b23565b806005819055507f64d1887078a96d281ed60dd69ba75bfb6b5cd2cb4c2d2538b2eb7816a4c646ea600554604051611c3191906135dd565b60405180910390a150565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600681526020017f444f495049540000000000000000000000000000000000000000000000000000815250905090565b611ca9612b23565b600654805a1015611cef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce690613a2f565b60405180910390fd5b600b5f9054906101000a900460ff1615611d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3590613cec565b60405180910390fd5b600a5f815480929190611d5090614673565b91905055505f60025490505f5b81811015611e12575f8190505f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508060095f600a5481526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555050508080611e0a90614673565b915050611d5d565b505050565b5f611e206128c6565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e859061472a565b60405180910390fd5b8160075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015611f0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f05906147b8565b60405180910390fd5b5f8060ff1614611f53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4a90613939565b60405180910390fd5b6001821015611f97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8e90614846565b60405180910390fd5b611fa2338484612ba1565b60019050611fae612b1a565b92915050565b5f816003548111611ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff190613c5e565b60405180910390fd5b80600381905550600654805a1015612047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203e90613a2f565b60405180910390fd5b600b5f9054906101000a900460ff1615612096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208d90613cec565b60405180910390fd5b60018510156120da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d1906148d4565b60405180910390fd5b6120e48686611e17565b925050509392505050565b6040518060400160405280600681526020017f444f49504954000000000000000000000000000000000000000000000000000081525081565b612130612b23565b600b5f9054906101000a900460ff1661217e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121759061493c565b60405180910390fd5b5f600b5f6101000a81548160ff0219169083151502179055507fab5f6dacf93a267a93a533de8a56370de8341bbd8102017307e7be375c3dda6a60405160405180910390a1565b5f600554905090565b5f600654805a1015612215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220c90613a2f565b60405180910390fd5b600b5f9054906101000a900460ff1615612264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225b90613cec565b60405180910390fd5b600a548311156122a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a0906149a4565b60405180910390fd5b60095f8481526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205491505092915050565b6123076128c6565b600654805a101561234d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234490613a2f565b60405180910390fd5b600b5f9054906101000a900460ff161561239c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239390613cec565b60405180910390fd5b60045f9054906101000a900460ff16156123eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e290614a58565b60405180910390fd5b600134101561242f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242690614ae6565b60405180910390fd5b3460075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461247b9190614338565b925050819055503460025f8282546124939190614338565b925050819055503460095f600a5481526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546124f79190614338565b925050819055503373ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef3460405161255b91906135dd565b60405180910390a35061256c612b1a565b565b6040518060400160405280601981526020017f444f4920506c757320496e63656e746976657320546f6b656e0000000000000081525081565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260d90614b74565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267b90614c02565b60405180910390fd5b60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60055481565b612713612b23565b806006819055507f3d1394ba0f6fca9c1e344f10a3efe1bfca63bc591232bb0d76755690f409450c60065460405161274b91906135dd565b60405180910390a150565b80600354811161279b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279290613c5e565b60405180910390fd5b80600381905550600654805a10156127e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127df90613a2f565b60405180910390fd5b600b5f9054906101000a900460ff1615612837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282e90613cec565b60405180910390fd5b61283f61161f565b505050565b61284c612b23565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036128ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b190614c90565b60405180910390fd5b6128c3816132c4565b50565b60025f540361290a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290190614cf8565b60405180910390fd5b60025f81905550565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612981576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297890614d60565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e690614dc8565b60405180910390fd5b6001811015612a33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2a90614e30565b60405180910390fd5b8060085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b0d91906135dd565b60405180910390a3505050565b60015f81905550565b612b2b613387565b73ffffffffffffffffffffffffffffffffffffffff16612b49611c3c565b73ffffffffffffffffffffffffffffffffffffffff1614612b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9690614e98565b60405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0690614f26565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7490614fb4565b60405180910390fd5b6001811015612cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb89061501c565b60405180910390fd5b8060075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015612d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3890615084565b60405180910390fd5b5f606460055483612d5291906150a2565b612d5c9190615110565b905060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054818360075f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612de69190614338565b612df0919061408b565b1015612e31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e289061518a565b60405180910390fd5b60075f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548160075f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612eb89190614338565b1015612ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef09061518a565b60405180910390fd5b8160075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612f45919061408b565b925050819055508082612f58919061408b565b60075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612fa39190614338565b925050819055508060075f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612ff69190614338565b925050819055508160095f600a5481526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461305a919061408b565b92505081905550808261306d919061408b565b60095f600a5481526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546130c99190614338565b925050819055508060095f600a5481526020019081526020015f205f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461312d9190614338565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161319191906135dd565b60405180910390a33073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516131f691906135dd565b60405180910390a350505050565b5f81836132119190614338565b905092915050565b5f825f015182101561322d575f90506132be565b6132478360400151845f015161320490919063ffffffff16565b821061325957826060015190506132be565b5f613270845f01518461338e90919063ffffffff16565b90505f61328e8560200151866040015161338e90919063ffffffff16565b90506132b9816132ab8488606001516133a390919063ffffffff16565b6133b890919063ffffffff16565b925050505b92915050565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b5f818361339b919061408b565b905092915050565b5f81836133b091906150a2565b905092915050565b5f81836133c59190615110565b905092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156134045780820151818401526020810190506133e9565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613429826133cd565b61343381856133d7565b93506134438185602086016133e7565b61344c8161340f565b840191505092915050565b5f6020820190508181035f83015261346f818461341f565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6134a48261347b565b9050919050565b6134b48161349a565b81146134be575f80fd5b50565b5f813590506134cf816134ab565b92915050565b5f819050919050565b6134e7816134d5565b81146134f1575f80fd5b50565b5f81359050613502816134de565b92915050565b5f806040838503121561351e5761351d613477565b5b5f61352b858286016134c1565b925050602061353c858286016134f4565b9150509250929050565b5f8115159050919050565b61355a81613546565b82525050565b5f6020820190506135735f830184613551565b92915050565b61358281613546565b811461358c575f80fd5b50565b5f8135905061359d81613579565b92915050565b5f602082840312156135b8576135b7613477565b5b5f6135c58482850161358f565b91505092915050565b6135d7816134d5565b82525050565b5f6020820190506135f05f8301846135ce565b92915050565b5f805f805f60a0868803121561360f5761360e613477565b5b5f61361c888289016134c1565b955050602061362d888289016134f4565b945050604061363e888289016134f4565b935050606061364f888289016134f4565b9250506080613660888289016134f4565b9150509295509295909350565b5f806040838503121561368357613682613477565b5b5f613690858286016134f4565b92505060206136a1858286016134f4565b9150509250929050565b5f805f606084860312156136c2576136c1613477565b5b5f6136cf868287016134c1565b93505060206136e0868287016134c1565b92505060406136f1868287016134f4565b9150509250925092565b5f602082840312156137105761370f613477565b5b5f61371d848285016134f4565b91505092915050565b5f60ff82169050919050565b61373b81613726565b82525050565b5f6020820190506137545f830184613732565b92915050565b5f6020828403121561376f5761376e613477565b5b5f61377c848285016134c1565b91505092915050565b61378e8161349a565b82525050565b5f6020820190506137a75f830184613785565b92915050565b5f805f606084860312156137c4576137c3613477565b5b5f6137d1868287016134c1565b93505060206137e2868287016134f4565b92505060406137f3868287016134f4565b9150509250925092565b5f806040838503121561381357613812613477565b5b5f613820858286016134c1565b9250506020613831858286016134c1565b9150509250929050565b7f417070726f76616c206661696c65643a205370656e64657220697320746865205f8201527f7a65726f20616464726573732028646f6573206e6f7420657869737429000000602082015250565b5f613895603d836133d7565b91506138a08261383b565b604082019050919050565b5f6020820190508181035f8301526138c281613889565b9050919050565b7f546f6b656e206973206e6f7420646976697369626c6520696e746f206c6573735f8201527f207468616e20612073696e676c6520746f6b656e20756e697400000000000000602082015250565b5f6139236039836133d7565b915061392e826138c9565b604082019050919050565b5f6020820190508181035f83015261395081613917565b9050919050565b7f417070726f76616c20616d6f756e74206d757374206265206174206c656173745f8201527f2031000000000000000000000000000000000000000000000000000000000000602082015250565b5f6139b16022836133d7565b91506139bc82613957565b604082019050919050565b5f6020820190508181035f8301526139de816139a5565b9050919050565b7f476173206c696d697420657863656564656400000000000000000000000000005f82015250565b5f613a196012836133d7565b9150613a24826139e5565b602082019050919050565b5f6020820190508181035f830152613a4681613a0d565b9050919050565b7f56657374696e67207363686564756c6520616c726561647920657869737473005f82015250565b5f613a81601f836133d7565b9150613a8c82613a4d565b602082019050919050565b5f6020820190508181035f830152613aae81613a75565b9050919050565b7f56657374696e672073746172742074696d65206d75737420626520696e2074685f8201527f6520667574757265000000000000000000000000000000000000000000000000602082015250565b5f613b0f6028836133d7565b9150613b1a82613ab5565b604082019050919050565b5f6020820190508181035f830152613b3c81613b03565b9050919050565b7f56657374696e6720616d6f756e74206d757374206265206772656174657220745f8201527f68616e207a65726f000000000000000000000000000000000000000000000000602082015250565b5f613b9d6028836133d7565b9150613ba882613b43565b604082019050919050565b5f6020820190508181035f830152613bca81613b91565b9050919050565b5f608082019050613be45f8301876135ce565b613bf160208301866135ce565b613bfe60408301856135ce565b613c0b60608301846135ce565b95945050505050565b7f5265706c61792061747461636b206465746563746564000000000000000000005f82015250565b5f613c486016836133d7565b9150613c5382613c14565b602082019050919050565b5f6020820190508181035f830152613c7581613c3c565b9050919050565b7f444f4920506c757320546f6b656e20436f6e74726163742069732070617573655f8201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b5f613cd66021836133d7565b9150613ce182613c7c565b604082019050919050565b5f6020820190508181035f830152613d0381613cca565b9050919050565b7f576974686472617720616d6f756e74206d7573742062652031206f72206d6f725f8201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b5f613d646021836133d7565b9150613d6f82613d0a565b604082019050919050565b5f6020820190508181035f830152613d9181613d58565b9050919050565b7f5472616e7366657246726f6d206661696c65643a2053656e64657220697320745f8201527f6865207a65726f20616464726573730000000000000000000000000000000000602082015250565b5f613df2602f836133d7565b9150613dfd82613d98565b604082019050919050565b5f6020820190508181035f830152613e1f81613de6565b9050919050565b7f5472616e7366657246726f6d206661696c65643a20526563697069656e7420695f8201527f7320746865207a65726f20616464726573730000000000000000000000000000602082015250565b5f613e806032836133d7565b9150613e8b82613e26565b604082019050919050565b5f6020820190508181035f830152613ead81613e74565b9050919050565b7f5472616e7366657246726f6d206661696c65643a2053656e64657220646f65735f8201527f206e6f74206861766520656e6f7567682062616c616e63650000000000000000602082015250565b5f613f0e6038836133d7565b9150613f1982613eb4565b604082019050919050565b5f6020820190508181035f830152613f3b81613f02565b9050919050565b7f5472616e7366657246726f6d206661696c65643a20416c6c6f77616e636520695f8201527f73206e6f7420656e6f7567680000000000000000000000000000000000000000602082015250565b5f613f9c602c836133d7565b9150613fa782613f42565b604082019050919050565b5f6020820190508181035f830152613fc981613f90565b9050919050565b7f5472616e7366657220616d6f756e74206d757374206265206174206c656173745f8201527f2031000000000000000000000000000000000000000000000000000000000000602082015250565b5f61402a6022836133d7565b915061403582613fd0565b604082019050919050565b5f6020820190508181035f8301526140578161401e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614095826134d5565b91506140a0836134d5565b92508282039050818111156140b8576140b761405e565b5b92915050565b7f5769746864726177206661696c65643a20616d6f756e742065786365656473205f8201527f62616c616e636500000000000000000000000000000000000000000000000000602082015250565b5f6141186027836133d7565b9150614123826140be565b604082019050919050565b5f6020820190508181035f8301526141458161410c565b9050919050565b7f576974686472617720616d6f756e74206d757374206265206174206c656173745f8201527f2031000000000000000000000000000000000000000000000000000000000000602082015250565b5f6141a66022836133d7565b91506141b18261414c565b604082019050919050565b5f6020820190508181035f8301526141d38161419a565b9050919050565b7f496e73756666696369656e7420636f6e74726163742062616c616e63650000005f82015250565b5f61420e601d836133d7565b9150614219826141da565b602082019050919050565b5f6020820190508181035f83015261423b81614202565b9050919050565b7f4d696e74206661696c65643a20726563697069656e7420697320746865207a655f8201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b5f61429c602a836133d7565b91506142a782614242565b604082019050919050565b5f6020820190508181035f8301526142c981614290565b9050919050565b7f4d696e7420616d6f756e74206d757374206265206174206c65617374203100005f82015250565b5f614304601e836133d7565b915061430f826142d0565b602082019050919050565b5f6020820190508181035f830152614331816142f8565b9050919050565b5f614342826134d5565b915061434d836134d5565b92508282019050808211156143655761436461405e565b5b92915050565b7f436f6e747261637420697320616c7265616479207061757365640000000000005f82015250565b5f61439f601a836133d7565b91506143aa8261436b565b602082019050919050565b5f6020820190508181035f8301526143cc81614393565b9050919050565b7f4e6f2076657374696e67207363686564756c6520666f756e6420666f722074685f8201527f652073656e646572000000000000000000000000000000000000000000000000602082015250565b5f61442d6028836133d7565b9150614438826143d3565b604082019050919050565b5f6020820190508181035f83015261445a81614421565b9050919050565b7f56657374696e6720636c69666620706572696f6420686173206e6f74207061735f8201527f7365642079657400000000000000000000000000000000000000000000000000602082015250565b5f6144bb6027836133d7565b91506144c682614461565b604082019050919050565b5f6020820190508181035f8301526144e8816144af565b9050919050565b7f4e6f2076657374656420746f6b656e7320617661696c61626c6520666f7220725f8201527f656c656173650000000000000000000000000000000000000000000000000000602082015250565b5f6145496026836133d7565b9150614554826144ef565b604082019050919050565b5f6020820190508181035f8301526145768161453d565b9050919050565b7f4e756d65726963206f766572666c6f77000000000000000000000000000000005f82015250565b5f6145b16010836133d7565b91506145bc8261457d565b602082019050919050565b5f6020820190508181035f8301526145de816145a5565b9050919050565b7f4163636f756e7420697320746865207a65726f20616464726573732028646f655f8201527f73206e6f74206578697374290000000000000000000000000000000000000000602082015250565b5f61463f602c836133d7565b915061464a826145e5565b604082019050919050565b5f6020820190508181035f83015261466c81614633565b9050919050565b5f61467d826134d5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036146af576146ae61405e565b5b600182019050919050565b7f5472616e73666572206661696c65643a20726563697069656e742069732074685f8201527f65207a65726f20616464726573732028646f6573206e6f742065786973742900602082015250565b5f614714603f836133d7565b915061471f826146ba565b604082019050919050565b5f6020820190508181035f83015261474181614708565b9050919050565b7f5472616e73666572206661696c65643a205468652073656e64657220646f65735f8201527f206e6f74206861766520656e6f7567682062616c616e63650000000000000000602082015250565b5f6147a26038836133d7565b91506147ad82614748565b604082019050919050565b5f6020820190508181035f8301526147cf81614796565b9050919050565b7f41207472616e7366657220616d6f756e74206d757374206265206174206c65615f8201527f7374203100000000000000000000000000000000000000000000000000000000602082015250565b5f6148306024836133d7565b915061483b826147d6565b604082019050919050565b5f6020820190508181035f83015261485d81614824565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652031206f72206d6f725f8201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b5f6148be6021836133d7565b91506148c982614864565b604082019050919050565b5f6020820190508181035f8301526148eb816148b2565b9050919050565b7f436f6e7472616374206973206e6f7420706175736564000000000000000000005f82015250565b5f6149266016836133d7565b9150614931826148f2565b602082019050919050565b5f6020820190508181035f8301526149538161491a565b9050919050565b7f536e617073686f7420646f6573206e6f742065786973740000000000000000005f82015250565b5f61498e6017836133d7565b91506149998261495a565b602082019050919050565b5f6020820190508181035f8301526149bb81614982565b9050919050565b7f546f6b656e206372656174696f6e2069732064697361626c65642061732077655f8201527f206861766520726561636865642074686520746172676574206f66203530303060208201527f20476f6c64204d656d6265727300000000000000000000000000000000000000604082015250565b5f614a42604d836133d7565b9150614a4d826149c2565b606082019050919050565b5f6020820190508181035f830152614a6f81614a36565b9050919050565b7f4465706f73697420616d6f756e74206d757374206265206174206c65617374205f8201527f3100000000000000000000000000000000000000000000000000000000000000602082015250565b5f614ad06021836133d7565b9150614adb82614a76565b604082019050919050565b5f6020820190508181035f830152614afd81614ac4565b9050919050565b7f416c6c6f77616e6365206661696c65643a204f776e657220697320746865207a5f8201527f65726f20616464726573732028646f6573206e6f742065786973742900000000602082015250565b5f614b5e603c836133d7565b9150614b6982614b04565b604082019050919050565b5f6020820190508181035f830152614b8b81614b52565b9050919050565b7f416c6c6f77616e6365206661696c65643a205370656e646572206973207468655f8201527f207a65726f20616464726573732028646f6573206e6f74206578697374290000602082015250565b5f614bec603e836133d7565b9150614bf782614b92565b604082019050919050565b5f6020820190508181035f830152614c1981614be0565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614c7a6026836133d7565b9150614c8582614c20565b604082019050919050565b5f6020820190508181035f830152614ca781614c6e565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f614ce2601f836133d7565b9150614ced82614cae565b602082019050919050565b5f6020820190508181035f830152614d0f81614cd6565b9050919050565b7f617070726f76652066726f6d20746865207a65726f20616464726573730000005f82015250565b5f614d4a601d836133d7565b9150614d5582614d16565b602082019050919050565b5f6020820190508181035f830152614d7781614d3e565b9050919050565b7f617070726f766520746f20746865207a65726f206164647265737300000000005f82015250565b5f614db2601b836133d7565b9150614dbd82614d7e565b602082019050919050565b5f6020820190508181035f830152614ddf81614da6565b9050919050565b7f417070726f76616c20616d6f756e74206d7573742062652031000000000000005f82015250565b5f614e1a6019836133d7565b9150614e2582614de6565b602082019050919050565b5f6020820190508181035f830152614e4781614e0e565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614e826020836133d7565b9150614e8d82614e4e565b602082019050919050565b5f6020820190508181035f830152614eaf81614e76565b9050919050565b7f5472616e736665722066726f6d20746865207a65726f2061646472657373202d5f8201527f206e6f7420616c6c6f7765640000000000000000000000000000000000000000602082015250565b5f614f10602c836133d7565b9150614f1b82614eb6565b604082019050919050565b5f6020820190508181035f830152614f3d81614f04565b9050919050565b7f5472616e7366657220746f20746865207a65726f2061646472657373202d206e5f8201527f6f7420616c6c6f77656400000000000000000000000000000000000000000000602082015250565b5f614f9e602a836133d7565b9150614fa982614f44565b604082019050919050565b5f6020820190508181035f830152614fcb81614f92565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652031000000000000005f82015250565b5f6150066019836133d7565b915061501182614fd2565b602082019050919050565b5f6020820190508181035f83015261503381614ffa565b9050919050565b7f5472616e7366657220616d6f756e7420657863656564732062616c616e6365005f82015250565b5f61506e601f836133d7565b91506150798261503a565b602082019050919050565b5f6020820190508181035f83015261509b81615062565b9050919050565b5f6150ac826134d5565b91506150b7836134d5565b92508282026150c5816134d5565b915082820484148315176150dc576150db61405e565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61511a826134d5565b9150615125836134d5565b925082615135576151346150e3565b5b828204905092915050565b7f416d6f756e74204e756d65726963206f766572666c6f770000000000000000005f82015250565b5f6151746017836133d7565b915061517f82615140565b602082019050919050565b5f6020820190508181035f8301526151a181615168565b905091905056fea2646970667358221220e807754bafb593d1e89a6cdb2a9d78a5eb345a95255530661de56db6daba9a6464736f6c63430008150033