608060405234801561000f575f80fd5b506040516127af3803806127af83398181016040528101906100319190610728565b338a8a81600390816100439190610a3d565b5080600490816100539190610a3d565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100c6575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100bd9190610b1b565b60405180910390fd5b6100d5816101ed60201b60201c565b508760068190555085600781905550846008819055508360098190555082600a8190555081600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506101de33886102b060201b60201c565b50505050505050505050610bf1565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610320575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016103179190610b1b565b60405180910390fd5b6103315f838361033560201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610385578060025f8282546103799190610b61565b92505081905550610453565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561040e578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161040593929190610ba3565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361049a578060025f82825403925050819055506104e4565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516105419190610bd8565b60405180910390a3505050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6105ad82610567565b810181811067ffffffffffffffff821117156105cc576105cb610577565b5b80604052505050565b5f6105de61054e565b90506105ea82826105a4565b919050565b5f67ffffffffffffffff82111561060957610608610577565b5b61061282610567565b9050602081019050919050565b8281835e5f83830152505050565b5f61063f61063a846105ef565b6105d5565b90508281526020810184848401111561065b5761065a610563565b5b61066684828561061f565b509392505050565b5f82601f8301126106825761068161055f565b5b815161069284826020860161062d565b91505092915050565b5f819050919050565b6106ad8161069b565b81146106b7575f80fd5b50565b5f815190506106c8816106a4565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6106f7826106ce565b9050919050565b610707816106ed565b8114610711575f80fd5b50565b5f81519050610722816106fe565b92915050565b5f805f805f805f805f806101408b8d03121561074757610746610557565b5b5f8b015167ffffffffffffffff8111156107645761076361055b565b5b6107708d828e0161066e565b9a505060208b015167ffffffffffffffff8111156107915761079061055b565b5b61079d8d828e0161066e565b99505060406107ae8d828e016106ba565b98505060606107bf8d828e016106ba565b97505060806107d08d828e016106ba565b96505060a06107e18d828e016106ba565b95505060c06107f28d828e016106ba565b94505060e06108038d828e016106ba565b9350506101006108158d828e01610714565b9250506101206108278d828e01610714565b9150509295989b9194979a5092959850565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061088757607f821691505b60208210810361089a57610899610843565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026108fc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826108c1565b61090686836108c1565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61094161093c6109378461069b565b61091e565b61069b565b9050919050565b5f819050919050565b61095a83610927565b61096e61096682610948565b8484546108cd565b825550505050565b5f90565b610982610976565b61098d818484610951565b505050565b5b818110156109b0576109a55f8261097a565b600181019050610993565b5050565b601f8211156109f5576109c6816108a0565b6109cf846108b2565b810160208510156109de578190505b6109f26109ea856108b2565b830182610992565b50505b505050565b5f82821c905092915050565b5f610a155f19846008026109fa565b1980831691505092915050565b5f610a2d8383610a06565b9150826002028217905092915050565b610a4682610839565b67ffffffffffffffff811115610a5f57610a5e610577565b5b610a698254610870565b610a748282856109b4565b5f60209050601f831160018114610aa5575f8415610a93578287015190505b610a9d8582610a22565b865550610b04565b601f198416610ab3866108a0565b5f5b82811015610ada57848901518255600182019150602085019450602081019050610ab5565b86831015610af75784890151610af3601f891682610a06565b8355505b6001600288020188555050505b505050505050565b610b15816106ed565b82525050565b5f602082019050610b2e5f830184610b0c565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610b6b8261069b565b9150610b768361069b565b9250828201905080821115610b8e57610b8d610b34565b5b92915050565b610b9d8161069b565b82525050565b5f606082019050610bb65f830186610b0c565b610bc36020830185610b94565b610bd06040830184610b94565b949350505050565b5f602082019050610beb5f830184610b94565b92915050565b611bb180610bfe5f395ff3fe608060405234801561000f575f80fd5b50600436106101d8575f3560e01c80636c7e15c91161010257806395d89b41116100a0578063d4f2d8781161006f578063d4f2d8781461051e578063d4fbfdfc1461053a578063dd62ed3e14610558578063f2fde38b14610588576101d8565b806395d89b4114610498578063a9059cbb146104b6578063b7de6fb5146104e6578063c024666814610502576101d8565b806373a432bb116100dc57806373a432bb1461042257806375f0a8741461043e5780638da5cb5b1461045c5780638ea5220f1461047a576101d8565b80636c7e15c9146103ca57806370a08231146103e8578063715018a614610418576101d8565b806323b872dd1161017a5780634c0f38c2116101495780634c0f38c2146103425780634fbee193146103605780635d098b381461039057806361e0c0f7146103ac576101d8565b806323b872dd146102ba57806326991cc8146102ea578063313ce5671461030857806340c10f1914610326576101d8565b806317c06e74116101b657806317c06e741461024657806318160ddd146102625780631f53ac021461028057806322eb66311461029c576101d8565b806306fdde03146101dc578063095ea7b3146101fa57806316fc22a61461022a575b5f80fd5b6101e46105a4565b6040516101f1919061165e565b60405180910390f35b610214600480360381019061020f919061170f565b610634565b6040516102219190611767565b60405180910390f35b610244600480360381019061023f9190611780565b610656565b005b610260600480360381019061025b9190611780565b610668565b005b61026a61067a565b60405161027791906117ba565b60405180910390f35b61029a600480360381019061029591906117d3565b610683565b005b6102a46106ce565b6040516102b191906117ba565b60405180910390f35b6102d460048036038101906102cf91906117fe565b6106d4565b6040516102e19190611767565b60405180910390f35b6102f2610702565b6040516102ff919061185d565b60405180910390f35b610310610727565b60405161031d9190611891565b60405180910390f35b610340600480360381019061033b919061170f565b61072f565b005b61034a6107a1565b60405161035791906117ba565b60405180910390f35b61037a600480360381019061037591906117d3565b6107aa565b6040516103879190611767565b60405180910390f35b6103aa60048036038101906103a591906117d3565b6107fc565b005b6103b4610847565b6040516103c191906117ba565b60405180910390f35b6103d261084d565b6040516103df91906117ba565b60405180910390f35b61040260048036038101906103fd91906117d3565b610853565b60405161040f91906117ba565b60405180910390f35b610420610898565b005b61043c600480360381019061043791906117d3565b6108ab565b005b6104466108f6565b604051610453919061185d565b60405180910390f35b61046461091b565b604051610471919061185d565b60405180910390f35b610482610943565b60405161048f919061185d565b60405180910390f35b6104a0610968565b6040516104ad919061165e565b60405180910390f35b6104d060048036038101906104cb919061170f565b6109f8565b6040516104dd9190611767565b60405180910390f35b61050060048036038101906104fb9190611780565b610a1a565b005b61051c600480360381019061051791906118d4565b610a2c565b005b61053860048036038101906105339190611780565b610a8c565b005b610542610a9e565b60405161054f91906117ba565b60405180910390f35b610572600480360381019061056d9190611912565b610aa4565b60405161057f91906117ba565b60405180910390f35b6105a2600480360381019061059d91906117d3565b610b26565b005b6060600380546105b39061197d565b80601f01602080910402602001604051908101604052809291908181526020018280546105df9061197d565b801561062a5780601f106106015761010080835404028352916020019161062a565b820191905f5260205f20905b81548152906001019060200180831161060d57829003601f168201915b5050505050905090565b5f8061063e610baa565b905061064b818585610bb1565b600191505092915050565b61065e610bc3565b8060088190555050565b610670610bc3565b80600a8190555050565b5f600254905090565b61068b610bc3565b80600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b5f806106de610baa565b90506106eb858285610c4a565b6106f6858585610cdc565b60019150509392505050565b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6012905090565b610737610bc3565b61073f6107a1565b8161074861067a565b61075291906119da565b1115610793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078a90611a57565b60405180910390fd5b61079d8282610fd4565b5050565b5f600654905090565b5f600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b610804610bc3565b80600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60095481565b60075481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6108a0610bc3565b6108a95f611053565b565b6108b3610bc3565b80600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600480546109779061197d565b80601f01602080910402602001604051908101604052809291908181526020018280546109a39061197d565b80156109ee5780601f106109c5576101008083540402835291602001916109ee565b820191905f5260205f20905b8154815290600101906020018083116109d157829003601f168201915b5050505050905090565b5f80610a02610baa565b9050610a0f818585610cdc565b600191505092915050565b610a22610bc3565b8060098190555050565b610a34610bc3565b80600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b610a94610bc3565b8060078190555050565b600a5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610b2e610bc3565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b9e575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610b95919061185d565b60405180910390fd5b610ba781611053565b50565b5f33905090565b610bbe8383836001611116565b505050565b610bcb610baa565b73ffffffffffffffffffffffffffffffffffffffff16610be961091b565b73ffffffffffffffffffffffffffffffffffffffff1614610c4857610c0c610baa565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610c3f919061185d565b60405180910390fd5b565b5f610c558484610aa4565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610cd65781811015610cc7578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610cbe93929190611a75565b60405180910390fd5b610cd584848484035f611116565b5b50505050565b5f819050600e5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015610d7e5750600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15610fc357600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015610ded57505f600954600754610deb91906119da565b115b15610ea4575f606460075484610e039190611aaa565b610e0d9190611b18565b90505f606460095485610e209190611aaa565b610e2a9190611b18565b9050808285610e399190611b48565b610e439190611b48565b9250610e7186600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846112e5565b610e9d86600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836112e5565b5050610fc2565b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015610f0e57505f600a54600854610f0c91906119da565b115b15610fc1575f606460085484610f249190611aaa565b610f2e9190611b18565b90505f6064600a5485610f419190611aaa565b610f4b9190611b18565b9050808285610f5a9190611b48565b610f649190611b48565b9250610f9286600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846112e5565b610fbe86600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836112e5565b50505b5b5b610fce8484836112e5565b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611044575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161103b919061185d565b60405180910390fd5b61104f5f83836113d5565b5050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611186575f6040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161117d919061185d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111f6575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016111ed919061185d565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080156112df578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516112d691906117ba565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611355575f6040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161134c919061185d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113c5575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016113bc919061185d565b60405180910390fd5b6113d08383836113d5565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611425578060025f82825461141991906119da565b925050819055506114f3565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156114ae578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016114a593929190611a75565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361153a578060025f8282540392505081905550611584565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516115e191906117ba565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f611630826115ee565b61163a81856115f8565b935061164a818560208601611608565b61165381611616565b840191505092915050565b5f6020820190508181035f8301526116768184611626565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6116ab82611682565b9050919050565b6116bb816116a1565b81146116c5575f80fd5b50565b5f813590506116d6816116b2565b92915050565b5f819050919050565b6116ee816116dc565b81146116f8575f80fd5b50565b5f81359050611709816116e5565b92915050565b5f80604083850312156117255761172461167e565b5b5f611732858286016116c8565b9250506020611743858286016116fb565b9150509250929050565b5f8115159050919050565b6117618161174d565b82525050565b5f60208201905061177a5f830184611758565b92915050565b5f602082840312156117955761179461167e565b5b5f6117a2848285016116fb565b91505092915050565b6117b4816116dc565b82525050565b5f6020820190506117cd5f8301846117ab565b92915050565b5f602082840312156117e8576117e761167e565b5b5f6117f5848285016116c8565b91505092915050565b5f805f606084860312156118155761181461167e565b5b5f611822868287016116c8565b9350506020611833868287016116c8565b9250506040611844868287016116fb565b9150509250925092565b611857816116a1565b82525050565b5f6020820190506118705f83018461184e565b92915050565b5f60ff82169050919050565b61188b81611876565b82525050565b5f6020820190506118a45f830184611882565b92915050565b6118b38161174d565b81146118bd575f80fd5b50565b5f813590506118ce816118aa565b92915050565b5f80604083850312156118ea576118e961167e565b5b5f6118f7858286016116c8565b9250506020611908858286016118c0565b9150509250929050565b5f80604083850312156119285761192761167e565b5b5f611935858286016116c8565b9250506020611946858286016116c8565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061199457607f821691505b6020821081036119a7576119a6611950565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6119e4826116dc565b91506119ef836116dc565b9250828201905080821115611a0757611a066119ad565b5b92915050565b7f4d617820537570706c79204578636565646564000000000000000000000000005f82015250565b5f611a416013836115f8565b9150611a4c82611a0d565b602082019050919050565b5f6020820190508181035f830152611a6e81611a35565b9050919050565b5f606082019050611a885f83018661184e565b611a9560208301856117ab565b611aa260408301846117ab565b949350505050565b5f611ab4826116dc565b9150611abf836116dc565b9250828202611acd816116dc565b91508282048414831517611ae457611ae36119ad565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611b22826116dc565b9150611b2d836116dc565b925082611b3d57611b3c611aeb565b5b828204905092915050565b5f611b52826116dc565b9150611b5d836116dc565b9250828203905081811115611b7557611b746119ad565b5b9291505056fea2646970667358221220f780f9c506c4ecf550ff9be2b4aec1b1e52b5664600a57c38eea06f27e3f543964736f6c634300081a00330000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000d3c21bcecceda10000000000000000000000000000000000000000000000000000008ac7230489e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000954657374546f6b656e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025454000000000000000000000000000000000000000000000000000000000000