60606040526402540be3ff600155336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506b033b2e3c9fd0803ce8000000600460008073ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611fc2806100d66000396000f300606060405260043610610112576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde0314610117578063084bdabe146101a5578063095ea7b3146101fb57806318160ddd1461025557806323b872dd1461027e578063313ce567146102f75780635c17f9f41461032657806370a08231146103c35780637d2aeb8a1461041057806386ce0285146104335780638da5cb5b1461048d57806395d89b41146104e2578063a29cc6c814610570578063a9059cbb146105d3578063ab67aa581461062d578063af35c6c7146106e9578063be45fd6214610716578063bf15ea76146107b3578063dd62ed3e146107dc578063f2fde38b14610848575b600080fd5b341561012257600080fd5b61012a610881565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561016a57808201518184015260208101905061014f565b50505050905090810190601f1680156101975780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156101b057600080fd5b6101e5600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506108ba565b6040518082815260200191505060405180910390f35b341561020657600080fd5b61023b600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506109a2565b604051808215151515815260200191505060405180910390f35b341561026057600080fd5b610268610ae0565b6040518082815260200191505060405180910390f35b341561028957600080fd5b6102dd600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610aea565b604051808215151515815260200191505060405180910390f35b341561030257600080fd5b61030a610e6c565b604051808260ff1660ff16815260200191505060405180910390f35b341561033157600080fd5b6103a9600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610e71565b604051808215151515815260200191505060405180910390f35b34156103ce57600080fd5b6103fa600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610f1f565b6040518082815260200191505060405180910390f35b341561041b57600080fd5b6104316004808035906020019091905050610f68565b005b341561043e57600080fd5b610473600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061138f565b604051808215151515815260200191505060405180910390f35b341561049857600080fd5b6104a06115fc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156104ed57600080fd5b6104f5611621565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561053557808201518184015260208101905061051a565b50505050905090810190601f1680156105625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561057b57600080fd5b6105b9600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001909190505061165a565b604051808215151515815260200191505060405180910390f35b34156105de57600080fd5b610613600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506118ab565b604051808215151515815260200191505060405180910390f35b341561063857600080fd5b6106cf600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050611ae0565b604051808215151515815260200191505060405180910390f35b34156106f457600080fd5b6106fc611b90565b604051808215151515815260200191505060405180910390f35b341561072157600080fd5b610799600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050611c4f565b604051808215151515815260200191505060405180910390f35b34156107be57600080fd5b6107c6611cfd565b6040518082815260200191505060405180910390f35b34156107e757600080fd5b610832600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611d03565b6040518082815260200191505060405180910390f35b341561085357600080fd5b61087f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611d8a565b005b6040805190810160405280601181526020017f54452d464f4f442f54757374436861696e00000000000000000000000000000081525081565b6000806000600660008581526020019081526020016000209150600090505b81805490508160ff161015610995578473ffffffffffffffffffffffffffffffffffffffff16828260ff1681548110151561091057fe5b906000526020600020906002020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561098857818160ff1681548110151561096f57fe5b906000526020600020906002020160010154925061099a565b80806001019150506108d9565b600092505b505092915050565b600060015442101515156109b557600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156109f057600080fd5b81600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600354905090565b60006001544210151515610afd57600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610b3857600080fd5b81600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610bc357600080fd5b610c1582600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611edf90919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610ce782600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611edf90919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610db982600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ef890919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b601281565b6000610e7d84846109a2565b508373ffffffffffffffffffffffffffffffffffffffff168260405180828051906020019080838360005b83811015610ec3578082015181840152602081019050610ea8565b50505050905090810190601f168015610ef05780820380516001836020036101000a031916815260200191505b5091505060006040518083038160008661646e5a03f19150501515610f1457600080fd5b600190509392505050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080610f8083600154611ef890919063ffffffff16565b4210151515610f8e57600080fd5b60006006600085815260200190815260200160002080549050111515610fb357600080fd5b6000600660008581526020019081526020016000206000815481101515610fd657fe5b906000526020600020906002020160010154111515610ff457600080fd5b600660008481526020019081526020016000209150600090505b81805490508160ff16101561138a576110d3828260ff1681548110151561103157fe5b90600052602060002090600202016001015460046000858560ff1681548110151561105857fe5b906000526020600020906002020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ef890919063ffffffff16565b60046000848460ff168154811015156110e857fe5b906000526020600020906002020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061118f828260ff1681548110151561116c57fe5b906000526020600020906002020160010154600354611ef890919063ffffffff16565b6003819055506111cc828260ff168154811015156111a957fe5b906000526020600020906002020160010154600254611edf90919063ffffffff16565b6002819055507f6bc5063c7239b75c8bf325a2a2238f726fada322163996bb6c93d5594fb119f0828260ff1681548110151561120457fe5b906000526020600020906002020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838360ff1681548110151561124757fe5b906000526020600020906002020160010154604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1818160ff168154811015156112b257fe5b906000526020600020906002020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef848460ff1681548110151561132e57fe5b9060005260206000209060020201600101546040518082815260200191505060405180910390a36000828260ff1681548110151561136857fe5b906000526020600020906002020160010181905550808060010191505061100e565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156113ec57600080fd5b60008373ffffffffffffffffffffffffffffffffffffffff161415151561141257600080fd5b60008211151561142157600080fd5b61145d82600460008073ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611edf90919063ffffffff16565b600460008073ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506114dc82600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ef890919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061153482600354611ef890919063ffffffff16565b6003819055506b033b2e3c9fd0803ce8000000611599600460008073ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461158b600354600254611ef890919063ffffffff16565b611ef890919063ffffffff16565b1415156115a257fe5b8273ffffffffffffffffffffffffffffffffffffffff1660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040805190810160405280600481526020017f544f4e450000000000000000000000000000000000000000000000000000000081525081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156116b757600080fd5b60008473ffffffffffffffffffffffffffffffffffffffff16141515156116dd57600080fd5b6000831115156116ec57600080fd5b6000821115156116fb57600080fd5b61173783600460008073ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611edf90919063ffffffff16565b600460008073ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506006600083815260200190815260200160002080548060010182816117899190611f16565b9160005260206000209060020201600060408051908101604052808873ffffffffffffffffffffffffffffffffffffffff16815260200187815250909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015550505061183283600254611ef890919063ffffffff16565b6002819055506b033b2e3c9fd0803ce8000000611897600460008073ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611889600354600254611ef890919063ffffffff16565b611ef890919063ffffffff16565b1415156118a057fe5b600190509392505050565b600060015442101515156118be57600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156118f957600080fd5b81600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561194757600080fd5b61199982600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611edf90919063ffffffff16565b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a2e82600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ef890919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b6000611aed858585610aea565b508373ffffffffffffffffffffffffffffffffffffffff168260405180828051906020019080838360005b83811015611b33578082015181840152602081019050611b18565b50505050905090810190601f168015611b605780820380516001836020036101000a031916815260200191505b5091505060006040518083038160008661646e5a03f19150501515611b8457600080fd5b60019050949350505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611bed57600080fd5b611c01600042611ef890919063ffffffff16565b60018190555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001905090565b6000611c5b84846118ab565b508373ffffffffffffffffffffffffffffffffffffffff168260405180828051906020019080838360005b83811015611ca1578082015181840152602081019050611c86565b50505050905090810190601f168015611cce5780820380516001836020036101000a031916815260200191505b5091505060006040518083038160008661646e5a03f19150501515611cf257600080fd5b600190509392505050565b60015481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611de557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611e2157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000828211151515611eed57fe5b818303905092915050565b6000808284019050838110151515611f0c57fe5b8091505092915050565b815481835581811511611f4357600202816002028360005260206000209182019101611f429190611f48565b5b505050565b611f9391905b80821115611f8f57600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182016000905550600201611f4e565b5090565b905600a165627a7a72305820240d5b45e082ec1ce44ea85bb7bbce831c4a198381b97c0b63dd88095ec25b530029