60806040526618de76816d8000600a556003600b55610bb8600c55612710600d553480156200002d57600080fd5b506040518060400160405280600e81526020017f676f626c696e706574242e7774660000000000000000000000000000000000008152506040518060400160405280600481526020017f47425073000000000000000000000000000000000000000000000000000000008152508160019080519060200190620000b2929190620001ca565b508060029080519060200190620000cb929190620001ca565b505050620000ee620000e2620000fc60201b60201c565b6200010460201b60201c565b6001600881905550620002df565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001d8906200027a565b90600052602060002090601f016020900481019282620001fc576000855562000248565b82601f106200021757805160ff191683800117855562000248565b8280016001018555821562000248579182015b82811115620002475782518255916020019190600101906200022a565b5b5090506200025791906200025b565b5090565b5b80821115620002765760008160009055506001016200025c565b5090565b600060028204905060018216806200029357607f821691505b60208210811415620002aa57620002a9620002b0565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6146b480620002ef6000396000f3fe6080604052600436106101f95760003560e01c80637d55094d1161010d578063b88d4fde116100a0578063d5abeb011161006f578063d5abeb01146106fc578063dc33e68114610727578063e985e9c514610764578063f2fde38b146107a1578063f968adbe146107ca576101f9565b8063b88d4fde14610642578063c6f6f2161461066b578063c87b56dd14610694578063d1239730146106d1576101f9565b806395d89b41116100dc57806395d89b41146105a7578063a035b1fe146105d2578063a0712d68146105fd578063a22cb46514610619576101f9565b80637d55094d146105135780638da5cb5b1461052a5780638db89f071461055557806391b7f5ed1461057e576101f9565b80633ccfd60b11610190578063563aaf111161015f578063563aaf111461042e5780636352211e146104575780636c0360eb1461049457806370a08231146104bf578063715018a6146104fc576101f9565b80633ccfd60b1461038857806342842e0e1461039f5780634f6ccce7146103c857806355f804b314610405576101f9565b806318160ddd116101cc57806318160ddd146102cc57806323b872dd146102f75780632f745c5914610320578063333e44e61461035d576101f9565b806301ffc9a7146101fe57806306fdde031461023b578063081812fc14610266578063095ea7b3146102a3575b600080fd5b34801561020a57600080fd5b50610225600480360381019061022091906130c4565b6107f5565b60405161023291906136dc565b60405180910390f35b34801561024757600080fd5b5061025061093f565b60405161025d91906136f7565b60405180910390f35b34801561027257600080fd5b5061028d6004803603810190610288919061316b565b6109d1565b60405161029a9190613675565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c59190613084565b610a56565b005b3480156102d857600080fd5b506102e1610b6f565b6040516102ee9190613a79565b60405180910390f35b34801561030357600080fd5b5061031e60048036038101906103199190612f6e565b610b78565b005b34801561032c57600080fd5b5061034760048036038101906103429190613084565b610b88565b6040516103549190613a79565b60405180910390f35b34801561036957600080fd5b50610372610d7a565b60405161037f9190613a79565b60405180910390f35b34801561039457600080fd5b5061039d610d80565b005b3480156103ab57600080fd5b506103c660048036038101906103c19190612f6e565b610f01565b005b3480156103d457600080fd5b506103ef60048036038101906103ea919061316b565b610f21565b6040516103fc9190613a79565b60405180910390f35b34801561041157600080fd5b5061042c6004803603810190610427919061311e565b610f74565b005b34801561043a57600080fd5b506104556004803603810190610450919061316b565b611006565b005b34801561046357600080fd5b5061047e6004803603810190610479919061316b565b61108c565b60405161048b9190613675565b60405180910390f35b3480156104a057600080fd5b506104a96110a2565b6040516104b691906136f7565b60405180910390f35b3480156104cb57600080fd5b506104e660048036038101906104e19190612f01565b611130565b6040516104f39190613a79565b60405180910390f35b34801561050857600080fd5b50610511611219565b005b34801561051f57600080fd5b506105286112a1565b005b34801561053657600080fd5b5061053f611349565b60405161054c9190613675565b60405180910390f35b34801561056157600080fd5b5061057c6004803603810190610577919061316b565b611373565b005b34801561058a57600080fd5b506105a560048036038101906105a0919061316b565b61145e565b005b3480156105b357600080fd5b506105bc6114e4565b6040516105c991906136f7565b60405180910390f35b3480156105de57600080fd5b506105e7611576565b6040516105f49190613a79565b60405180910390f35b6106176004803603810190610612919061316b565b61157c565b005b34801561062557600080fd5b50610640600480360381019061063b9190613044565b61170c565b005b34801561064e57600080fd5b5061066960048036038101906106649190612fc1565b61188d565b005b34801561067757600080fd5b50610692600480360381019061068d919061316b565b6118e9565b005b3480156106a057600080fd5b506106bb60048036038101906106b6919061316b565b61196f565b6040516106c891906136f7565b60405180910390f35b3480156106dd57600080fd5b506106e6611a17565b6040516106f391906136dc565b60405180910390f35b34801561070857600080fd5b50610711611a2a565b60405161071e9190613a79565b60405180910390f35b34801561073357600080fd5b5061074e60048036038101906107499190612f01565b611a30565b60405161075b9190613a79565b60405180910390f35b34801561077057600080fd5b5061078b60048036038101906107869190612f2e565b611a42565b60405161079891906136dc565b60405180910390f35b3480156107ad57600080fd5b506107c860048036038101906107c39190612f01565b611ad6565b005b3480156107d657600080fd5b506107df611bce565b6040516107ec9190613a79565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108c057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061092857507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610938575061093782611bd4565b5b9050919050565b60606001805461094e90613d03565b80601f016020809104026020016040519081016040528092919081815260200182805461097a90613d03565b80156109c75780601f1061099c576101008083540402835291602001916109c7565b820191906000526020600020905b8154815290600101906020018083116109aa57829003601f168201915b5050505050905090565b60006109dc82611c3e565b610a1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1290613a59565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a618261108c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ad2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac990613939565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610af1611c4b565b73ffffffffffffffffffffffffffffffffffffffff161480610b205750610b1f81610b1a611c4b565b611a42565b5b610b5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5690613819565b60405180910390fd5b610b6a838383611c53565b505050565b60008054905090565b610b83838383611d05565b505050565b6000610b9383611130565b8210610bd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcb90613719565b60405180910390fd5b6000610bde610b6f565b905060008060005b83811015610d38576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610cd857806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d2a5786841415610d21578195505050505050610d74565b83806001019450505b508080600101915050610be6565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6b906139f9565b60405180910390fd5b92915050565b600c5481565b610d88611c4b565b73ffffffffffffffffffffffffffffffffffffffff16610da6611349565b73ffffffffffffffffffffffffffffffffffffffff1614610dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df390613879565b60405180910390fd5b60026008541415610e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3990613a19565b60405180910390fd5b600260088190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051610e7090613660565b60006040518083038185875af1925050503d8060008114610ead576040519150601f19603f3d011682016040523d82523d6000602084013e610eb2565b606091505b5050905080610ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eed90613959565b60405180910390fd5b506001600881905550565b610f1c8383836040518060200160405280600081525061188d565b505050565b6000610f2b610b6f565b8210610f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6390613779565b60405180910390fd5b819050919050565b610f7c611c4b565b73ffffffffffffffffffffffffffffffffffffffff16610f9a611349565b73ffffffffffffffffffffffffffffffffffffffff1614610ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe790613879565b60405180910390fd5b818160099190611001929190612cf5565b505050565b61100e611c4b565b73ffffffffffffffffffffffffffffffffffffffff1661102c611349565b73ffffffffffffffffffffffffffffffffffffffff1614611082576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107990613879565b60405180910390fd5b80600c8190555050565b600061109782612245565b600001519050919050565b600980546110af90613d03565b80601f01602080910402602001604051908101604052809291908181526020018280546110db90613d03565b80156111285780601f106110fd57610100808354040283529160200191611128565b820191906000526020600020905b81548152906001019060200180831161110b57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119890613839565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611221611c4b565b73ffffffffffffffffffffffffffffffffffffffff1661123f611349565b73ffffffffffffffffffffffffffffffffffffffff1614611295576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128c90613879565b60405180910390fd5b61129f60006123df565b565b6112a9611c4b565b73ffffffffffffffffffffffffffffffffffffffff166112c7611349565b73ffffffffffffffffffffffffffffffffffffffff161461131d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131490613879565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61137b611c4b565b73ffffffffffffffffffffffffffffffffffffffff16611399611349565b73ffffffffffffffffffffffffffffffffffffffff16146113ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e690613879565b60405180910390fd5b6001600d546113fe9190613b38565b81611407610b6f565b6114119190613b38565b10611451576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611448906137f9565b60405180910390fd5b61145b33826124a5565b50565b611466611c4b565b73ffffffffffffffffffffffffffffffffffffffff16611484611349565b73ffffffffffffffffffffffffffffffffffffffff16146114da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d190613879565b60405180910390fd5b80600a8190555050565b6060600280546114f390613d03565b80601f016020809104026020016040519081016040528092919081815260200182805461151f90613d03565b801561156c5780601f106115415761010080835404028352916020019161156c565b820191906000526020600020905b81548152906001019060200180831161154f57829003601f168201915b5050505050905090565b600a5481565b6000600a5490506001600c546115929190613b38565b8261159b610b6f565b6115a59190613b38565b10156115b057600090505b600e60009054906101000a900460ff166115ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f6906137d9565b60405180910390fd5b6001600d5461160e9190613b38565b82611617610b6f565b6116219190613b38565b10611661576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611658906138d9565b60405180910390fd5b808261166d9190613bbf565b34146116ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a590613919565b60405180910390fd5b6001600b546116bd9190613b38565b82106116fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f590613999565b60405180910390fd5b61170833836124a5565b5050565b611714611c4b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611782576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611779906138b9565b60405180910390fd5b806006600061178f611c4b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661183c611c4b565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161188191906136dc565b60405180910390a35050565b611898848484611d05565b6118a4848484846124c3565b6118e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118da90613979565b60405180910390fd5b50505050565b6118f1611c4b565b73ffffffffffffffffffffffffffffffffffffffff1661190f611349565b73ffffffffffffffffffffffffffffffffffffffff1614611965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195c90613879565b60405180910390fd5b80600b8190555050565b606061197a82611c3e565b6119b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b090613899565b60405180910390fd5b60006119c361265a565b90506000815114156119e45760405180602001604052806000815250611a0f565b806119ee846126ec565b6040516020016119ff92919061363c565b6040516020818303038152906040525b915050919050565b600e60009054906101000a900460ff1681565b600d5481565b6000611a3b8261284d565b9050919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ade611c4b565b73ffffffffffffffffffffffffffffffffffffffff16611afc611349565b73ffffffffffffffffffffffffffffffffffffffff1614611b52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4990613879565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb990613739565b60405180910390fd5b611bcb816123df565b50565b600b5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611d1082612245565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611d37611c4b565b73ffffffffffffffffffffffffffffffffffffffff161480611d935750611d5c611c4b565b73ffffffffffffffffffffffffffffffffffffffff16611d7b846109d1565b73ffffffffffffffffffffffffffffffffffffffff16145b80611daf5750611dae8260000151611da9611c4b565b611a42565b5b905080611df1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de8906138f9565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5a90613859565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ed3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eca90613799565b60405180910390fd5b611ee08585856001612936565b611ef06000848460000151611c53565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156121d55761213481611c3e565b156121d45782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461223e858585600161293c565b5050505050565b61224d612d7b565b61225682611c3e565b612295576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228c90613759565b60405180910390fd5b60008290505b6000811061239e576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461238f5780925050506123da565b5080806001900391505061229b565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d190613a39565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6124bf828260405180602001604052806000815250612942565b5050565b60006124e48473ffffffffffffffffffffffffffffffffffffffff16612954565b1561264d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261250d611c4b565b8786866040518563ffffffff1660e01b815260040161252f9493929190613690565b602060405180830381600087803b15801561254957600080fd5b505af192505050801561257a57506040513d601f19601f8201168201806040525081019061257791906130f1565b60015b6125fd573d80600081146125aa576040519150601f19603f3d011682016040523d82523d6000602084013e6125af565b606091505b506000815114156125f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ec90613979565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612652565b600190505b949350505050565b60606009805461266990613d03565b80601f016020809104026020016040519081016040528092919081815260200182805461269590613d03565b80156126e25780601f106126b7576101008083540402835291602001916126e2565b820191906000526020600020905b8154815290600101906020018083116126c557829003601f168201915b5050505050905090565b60606000821415612734576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612848565b600082905060005b6000821461276657808061274f90613d66565b915050600a8261275f9190613b8e565b915061273c565b60008167ffffffffffffffff81111561278257612781613e9c565b5b6040519080825280601f01601f1916602001820160405280156127b45781602001600182028036833780820191505090505b5090505b60008514612841576001826127cd9190613c19565b9150600a856127dc9190613daf565b60306127e89190613b38565b60f81b8183815181106127fe576127fd613e6d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561283a9190613b8e565b94506127b8565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b5906137b9565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b61294f8383836001612977565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156129ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e4906139b9565b60405180910390fd5b6000841415612a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a28906139d9565b60405180910390fd5b612a3e6000868387612936565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015612cd857818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315612cc357612c8360008884886124c3565b612cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb990613979565b60405180910390fd5b5b81806001019250508080600101915050612c0c565b508060008190555050612cee600086838761293c565b5050505050565b828054612d0190613d03565b90600052602060002090601f016020900481019282612d235760008555612d6a565b82601f10612d3c57803560ff1916838001178555612d6a565b82800160010185558215612d6a579182015b82811115612d69578235825591602001919060010190612d4e565b5b509050612d779190612db5565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612dce576000816000905550600101612db6565b5090565b6000612de5612de084613ab9565b613a94565b905082815260208101848484011115612e0157612e00613eda565b5b612e0c848285613cc1565b509392505050565b600081359050612e2381614622565b92915050565b600081359050612e3881614639565b92915050565b600081359050612e4d81614650565b92915050565b600081519050612e6281614650565b92915050565b600082601f830112612e7d57612e7c613ed0565b5b8135612e8d848260208601612dd2565b91505092915050565b60008083601f840112612eac57612eab613ed0565b5b8235905067ffffffffffffffff811115612ec957612ec8613ecb565b5b602083019150836001820283011115612ee557612ee4613ed5565b5b9250929050565b600081359050612efb81614667565b92915050565b600060208284031215612f1757612f16613ee4565b5b6000612f2584828501612e14565b91505092915050565b60008060408385031215612f4557612f44613ee4565b5b6000612f5385828601612e14565b9250506020612f6485828601612e14565b9150509250929050565b600080600060608486031215612f8757612f86613ee4565b5b6000612f9586828701612e14565b9350506020612fa686828701612e14565b9250506040612fb786828701612eec565b9150509250925092565b60008060008060808587031215612fdb57612fda613ee4565b5b6000612fe987828801612e14565b9450506020612ffa87828801612e14565b935050604061300b87828801612eec565b925050606085013567ffffffffffffffff81111561302c5761302b613edf565b5b61303887828801612e68565b91505092959194509250565b6000806040838503121561305b5761305a613ee4565b5b600061306985828601612e14565b925050602061307a85828601612e29565b9150509250929050565b6000806040838503121561309b5761309a613ee4565b5b60006130a985828601612e14565b92505060206130ba85828601612eec565b9150509250929050565b6000602082840312156130da576130d9613ee4565b5b60006130e884828501612e3e565b91505092915050565b60006020828403121561310757613106613ee4565b5b600061311584828501612e53565b91505092915050565b6000806020838503121561313557613134613ee4565b5b600083013567ffffffffffffffff81111561315357613152613edf565b5b61315f85828601612e96565b92509250509250929050565b60006020828403121561318157613180613ee4565b5b600061318f84828501612eec565b91505092915050565b6131a181613c4d565b82525050565b6131b081613c5f565b82525050565b60006131c182613aea565b6131cb8185613b00565b93506131db818560208601613cd0565b6131e481613ee9565b840191505092915050565b60006131fa82613af5565b6132048185613b1c565b9350613214818560208601613cd0565b61321d81613ee9565b840191505092915050565b600061323382613af5565b61323d8185613b2d565b935061324d818560208601613cd0565b80840191505092915050565b6000613266602283613b1c565b915061327182613efa565b604082019050919050565b6000613289602683613b1c565b915061329482613f49565b604082019050919050565b60006132ac602a83613b1c565b91506132b782613f98565b604082019050919050565b60006132cf602383613b1c565b91506132da82613fe7565b604082019050919050565b60006132f2602583613b1c565b91506132fd82614036565b604082019050919050565b6000613315603183613b1c565b915061332082614085565b604082019050919050565b6000613338602483613b1c565b9150613343826140d4565b604082019050919050565b600061335b600983613b1c565b915061336682614123565b602082019050919050565b600061337e603983613b1c565b91506133898261414c565b604082019050919050565b60006133a1602b83613b1c565b91506133ac8261419b565b604082019050919050565b60006133c4602683613b1c565b91506133cf826141ea565b604082019050919050565b60006133e7602083613b1c565b91506133f282614239565b602082019050919050565b600061340a602f83613b1c565b915061341582614262565b604082019050919050565b600061342d601a83613b1c565b9150613438826142b1565b602082019050919050565b6000613450600c83613b1c565b915061345b826142da565b602082019050919050565b6000613473603283613b1c565b915061347e82614303565b604082019050919050565b6000613496601c83613b1c565b91506134a182614352565b602082019050919050565b60006134b9602283613b1c565b91506134c48261437b565b604082019050919050565b60006134dc600083613b11565b91506134e7826143ca565b600082019050919050565b60006134ff601083613b1c565b915061350a826143cd565b602082019050919050565b6000613522603383613b1c565b915061352d826143f6565b604082019050919050565b6000613545601283613b1c565b915061355082614445565b602082019050919050565b6000613568602183613b1c565b91506135738261446e565b604082019050919050565b600061358b602883613b1c565b9150613596826144bd565b604082019050919050565b60006135ae602e83613b1c565b91506135b98261450c565b604082019050919050565b60006135d1601f83613b1c565b91506135dc8261455b565b602082019050919050565b60006135f4602f83613b1c565b91506135ff82614584565b604082019050919050565b6000613617602d83613b1c565b9150613622826145d3565b604082019050919050565b61363681613cb7565b82525050565b60006136488285613228565b91506136548284613228565b91508190509392505050565b600061366b826134cf565b9150819050919050565b600060208201905061368a6000830184613198565b92915050565b60006080820190506136a56000830187613198565b6136b26020830186613198565b6136bf604083018561362d565b81810360608301526136d181846131b6565b905095945050505050565b60006020820190506136f160008301846131a7565b92915050565b6000602082019050818103600083015261371181846131ef565b905092915050565b6000602082019050818103600083015261373281613259565b9050919050565b600060208201905081810360008301526137528161327c565b9050919050565b600060208201905081810360008301526137728161329f565b9050919050565b60006020820190508181036000830152613792816132c2565b9050919050565b600060208201905081810360008301526137b2816132e5565b9050919050565b600060208201905081810360008301526137d281613308565b9050919050565b600060208201905081810360008301526137f28161332b565b9050919050565b600060208201905081810360008301526138128161334e565b9050919050565b6000602082019050818103600083015261383281613371565b9050919050565b6000602082019050818103600083015261385281613394565b9050919050565b60006020820190508181036000830152613872816133b7565b9050919050565b60006020820190508181036000830152613892816133da565b9050919050565b600060208201905081810360008301526138b2816133fd565b9050919050565b600060208201905081810360008301526138d281613420565b9050919050565b600060208201905081810360008301526138f281613443565b9050919050565b6000602082019050818103600083015261391281613466565b9050919050565b6000602082019050818103600083015261393281613489565b9050919050565b60006020820190508181036000830152613952816134ac565b9050919050565b60006020820190508181036000830152613972816134f2565b9050919050565b6000602082019050818103600083015261399281613515565b9050919050565b600060208201905081810360008301526139b281613538565b9050919050565b600060208201905081810360008301526139d28161355b565b9050919050565b600060208201905081810360008301526139f28161357e565b9050919050565b60006020820190508181036000830152613a12816135a1565b9050919050565b60006020820190508181036000830152613a32816135c4565b9050919050565b60006020820190508181036000830152613a52816135e7565b9050919050565b60006020820190508181036000830152613a728161360a565b9050919050565b6000602082019050613a8e600083018461362d565b92915050565b6000613a9e613aaf565b9050613aaa8282613d35565b919050565b6000604051905090565b600067ffffffffffffffff821115613ad457613ad3613e9c565b5b613add82613ee9565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613b4382613cb7565b9150613b4e83613cb7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b8357613b82613de0565b5b828201905092915050565b6000613b9982613cb7565b9150613ba483613cb7565b925082613bb457613bb3613e0f565b5b828204905092915050565b6000613bca82613cb7565b9150613bd583613cb7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c0e57613c0d613de0565b5b828202905092915050565b6000613c2482613cb7565b9150613c2f83613cb7565b925082821015613c4257613c41613de0565b5b828203905092915050565b6000613c5882613c97565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613cee578082015181840152602081019050613cd3565b83811115613cfd576000848401525b50505050565b60006002820490506001821680613d1b57607f821691505b60208210811415613d2f57613d2e613e3e565b5b50919050565b613d3e82613ee9565b810181811067ffffffffffffffff82111715613d5d57613d5c613e9c565b5b80604052505050565b6000613d7182613cb7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613da457613da3613de0565b5b600182019050919050565b6000613dba82613cb7565b9150613dc583613cb7565b925082613dd557613dd4613e0f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f4d696e74696e67206973206e6f74206c697665207965742c20686f6c64206f6e60008201527f2070657400000000000000000000000000000000000000000000000000000000602082015250565b7f746f6f206d616e79210000000000000000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f4e6f206d6f726520706574730000000000000000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f506c656173652073656e642074686520657861637420616d6f756e7400000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f4d61782070657220545820726561636865640000000000000000000000000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b61462b81613c4d565b811461463657600080fd5b50565b61464281613c5f565b811461464d57600080fd5b50565b61465981613c6b565b811461466457600080fd5b50565b61467081613cb7565b811461467b57600080fd5b5056fea2646970667358221220c4bb8a02157c8dc8893f1f048e1c5fa86878fecaa79332d602b663faebdf5d6564736f6c63430008070033