6080604052604051806060016040528060328152602001620058b860329139600c908051906020019062000035929190620009d9565b506611c37937e08000600d556014600e556122b8600f556000601060006101000a81548160ff02191690831515021790555060016011556000601360006101000a81548160ff0219169083600181111562000095576200009462000a89565b5b0217905550348015620000a757600080fd5b506040518060400160405280600d81526020017f476f626c696e536f6c64696572000000000000000000000000000000000000008152506040518060400160405280600281526020017f475300000000000000000000000000000000000000000000000000000000000081525081600290805190602001906200012c929190620009d9565b50806003908051906020019062000145929190620009d9565b5062000156620001b260201b60201c565b60008190555050506200017e62000172620001b760201b60201c565b620001bf60201b60201c565b6001600b81905550620001993360c86200028560201b60201c565b620001ac3360646200042960201b60201c565b62000e24565b600090565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002956200044f60201b60201c565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff161115620002f6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002ed9062000b3f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000369576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003609062000bb1565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600860008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b6200044b8282604051806020016040528060008152506200045960201b60201c565b5050565b6000612710905090565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415620004c7576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083141562000503576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200051860008583866200084860201b60201c565b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008482019050620006e68673ffffffffffffffffffffffffffffffffffffffff166200084e60201b620020d51760201c565b15620007b8575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46200076460008784806001019550876200087160201b60201c565b6200079b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808210620006ed578260005414620007b257600080fd5b62000824565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210620007b9575b816000819055505050620008426000858386620009d360201b60201c565b50505050565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026200089f620001b760201b60201c565b8786866040518563ffffffff1660e01b8152600401620008c3949392919062000cd7565b6020604051808303816000875af19250505080156200090257506040513d601f19601f82011682018060405250810190620008ff919062000d8d565b60015b62000980573d806000811462000935576040519150601f19603f3d011682016040523d82523d6000602084013e6200093a565b606091505b5060008151141562000978576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b50505050565b828054620009e79062000dee565b90600052602060002090601f01602090048101928262000a0b576000855562000a57565b82601f1062000a2657805160ff191683800117855562000a57565b8280016001018555821562000a57579182015b8281111562000a5657825182559160200191906001019062000a39565b5b50905062000a66919062000a6a565b5090565b5b8082111562000a8557600081600090555060010162000a6b565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600082825260208201905092915050565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b600062000b27602a8362000ab8565b915062000b348262000ac9565b604082019050919050565b6000602082019050818103600083015262000b5a8162000b18565b9050919050565b7f455243323938313a20696e76616c696420726563656976657200000000000000600082015250565b600062000b9960198362000ab8565b915062000ba68262000b61565b602082019050919050565b6000602082019050818103600083015262000bcc8162000b8a565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c008262000bd3565b9050919050565b62000c128162000bf3565b82525050565b6000819050919050565b62000c2d8162000c18565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101562000c6f57808201518184015260208101905062000c52565b8381111562000c7f576000848401525b50505050565b6000601f19601f8301169050919050565b600062000ca38262000c33565b62000caf818562000c3e565b935062000cc181856020860162000c4f565b62000ccc8162000c85565b840191505092915050565b600060808201905062000cee600083018762000c07565b62000cfd602083018662000c07565b62000d0c604083018562000c22565b818103606083015262000d20818462000c96565b905095945050505050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b62000d678162000d30565b811462000d7357600080fd5b50565b60008151905062000d878162000d5c565b92915050565b60006020828403121562000da65762000da562000d2b565b5b600062000db68482850162000d76565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000e0757607f821691505b6020821081141562000e1e5762000e1d62000dbf565b5b50919050565b614a848062000e346000396000f3fe6080604052600436106102305760003560e01c80636f8b44b01161012e578063b88d4fde116100ab578063e5a519521161006f578063e5a5195214610815578063e985e9c514610852578063eb8d24441461088f578063f2fde38b146108ba578063f47c84c5146108e357610230565b8063b88d4fde1461072d578063b9bed05e14610756578063c634d0321461077f578063c87b56dd1461079b578063dc33e681146107d857610230565b80637ff9b596116100f25780637ff9b5961461065a5780638da5cb5b14610685578063900c71f5146106b057806395d89b41146106d9578063a22cb4651461070457610230565b80636f8b44b01461058b57806370a08231146105b4578063715018a6146105f157806378cf19e914610608578063790750ce1461063157610230565b80632a55205a116101bc57806355f804b31161018057806355f804b3146104a65780635e307a48146104cf5780636352211e146104fa5780636a61e5fc146105375780636c0360eb1461056057610230565b80632a55205a146103d457806334918dfd146104125780633ccfd60b1461042957806342842e0e146104405780634df8bb451461046957610230565b8063095ea7b311610203578063095ea7b3146103035780630f2663511461032c57806318160ddd14610357578063205c28781461038257806323b872dd146103ab57610230565b806301ffc9a71461023557806302fa7c471461027257806306fdde031461029b578063081812fc146102c6575b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190613669565b61090e565b60405161026991906136b1565b60405180910390f35b34801561027e57600080fd5b506102996004803603810190610294919061376e565b610920565b005b3480156102a757600080fd5b506102b06109aa565b6040516102bd9190613847565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e8919061389f565b610a3c565b6040516102fa91906138db565b60405180910390f35b34801561030f57600080fd5b5061032a600480360381019061032591906138f6565b610ab8565b005b34801561033857600080fd5b50610341610bbd565b60405161034e9190613945565b60405180910390f35b34801561036357600080fd5b5061036c610bc3565b6040516103799190613945565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a491906138f6565b610bda565b005b3480156103b757600080fd5b506103d260048036038101906103cd9190613960565b610ce4565b005b3480156103e057600080fd5b506103fb60048036038101906103f691906139b3565b610cf4565b6040516104099291906139f3565b60405180910390f35b34801561041e57600080fd5b50610427610edf565b005b34801561043557600080fd5b5061043e610f87565b005b34801561044c57600080fd5b5061046760048036038101906104629190613960565b611052565b005b34801561047557600080fd5b50610490600480360381019061048b9190613a1c565b611072565b60405161049d9190613af5565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c89190613c45565b611119565b005b3480156104db57600080fd5b506104e46111af565b6040516104f19190613945565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c919061389f565b6111b5565b60405161052e91906138db565b60405180910390f35b34801561054357600080fd5b5061055e6004803603810190610559919061389f565b6111cb565b005b34801561056c57600080fd5b50610575611251565b6040516105829190613847565b60405180910390f35b34801561059757600080fd5b506105b260048036038101906105ad919061389f565b6112df565b005b3480156105c057600080fd5b506105db60048036038101906105d69190613a1c565b611365565b6040516105e89190613945565b60405180910390f35b3480156105fd57600080fd5b50610606611435565b005b34801561061457600080fd5b5061062f600480360381019061062a91906138f6565b6114bd565b005b34801561063d57600080fd5b506106586004803603810190610653919061389f565b6115a5565b005b34801561066657600080fd5b5061066f61162b565b60405161067c9190613945565b60405180910390f35b34801561069157600080fd5b5061069a611631565b6040516106a791906138db565b60405180910390f35b3480156106bc57600080fd5b506106d760048036038101906106d2919061389f565b61165b565b005b3480156106e557600080fd5b506106ee61173f565b6040516106fb9190613847565b60405180910390f35b34801561071057600080fd5b5061072b60048036038101906107269190613cba565b6117d1565b005b34801561073957600080fd5b50610754600480360381019061074f9190613d9b565b611949565b005b34801561076257600080fd5b5061077d6004803603810190610778919061389f565b6119c1565b005b6107996004803603810190610794919061389f565b611a47565b005b3480156107a757600080fd5b506107c260048036038101906107bd919061389f565b611d93565b6040516107cf9190613847565b60405180910390f35b3480156107e457600080fd5b506107ff60048036038101906107fa9190613a1c565b611ed5565b60405161080c9190613945565b60405180910390f35b34801561082157600080fd5b5061083c60048036038101906108379190613a1c565b611ee7565b6040516108499190613945565b60405180910390f35b34801561085e57600080fd5b5061087960048036038101906108749190613e1e565b611f30565b60405161088691906136b1565b60405180910390f35b34801561089b57600080fd5b506108a4611fc4565b6040516108b191906136b1565b60405180910390f35b3480156108c657600080fd5b506108e160048036038101906108dc9190613a1c565b611fd7565b005b3480156108ef57600080fd5b506108f86120cf565b6040516109059190613945565b60405180910390f35b6000610919826120f8565b9050919050565b610928612172565b73ffffffffffffffffffffffffffffffffffffffff16610946611631565b73ffffffffffffffffffffffffffffffffffffffff161461099c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099390613eaa565b60405180910390fd5b6109a6828261217a565b5050565b6060600280546109b990613ef9565b80601f01602080910402602001604051908101604052809291908181526020018280546109e590613ef9565b8015610a325780601f10610a0757610100808354040283529160200191610a32565b820191906000526020600020905b815481529060010190602001808311610a1557829003601f168201915b5050505050905090565b6000610a4782612310565b610a7d576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ac3826111b5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b2b576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b4a612172565b73ffffffffffffffffffffffffffffffffffffffff1614610bad57610b7681610b71612172565b611f30565b610bac576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b610bb883838361235e565b505050565b60115481565b6000610bcd612410565b6001546000540303905090565b610be2612172565b73ffffffffffffffffffffffffffffffffffffffff16610c00611631565b73ffffffffffffffffffffffffffffffffffffffff1614610c56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4d90613eaa565b60405180910390fd5b47811115610c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9090613f9d565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610cdf573d6000803e3d6000fd5b505050565b610cef838383612415565b505050565b6000806000600960008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161415610e8a5760086040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b6000610e946128cb565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff1686610ec09190613fec565b610eca9190614075565b90508160000151819350935050509250929050565b610ee7612172565b73ffffffffffffffffffffffffffffffffffffffff16610f05611631565b73ffffffffffffffffffffffffffffffffffffffff1614610f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5290613eaa565b60405180910390fd5b601060009054906101000a900460ff1615601060006101000a81548160ff021916908315150217905550565b610f8f612172565b73ffffffffffffffffffffffffffffffffffffffff16610fad611631565b73ffffffffffffffffffffffffffffffffffffffff1614611003576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffa90613eaa565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561104e573d6000803e3d6000fd5b5050565b61106d83838360405180602001604052806000815250611949565b505050565b61107a6134d8565b6040518060e00160405280600d548152602001600e548152602001600f548152602001601060009054906101000a900460ff16151581526020016110bc610bc3565b81526020016110ca846128d5565b8152602001601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548152509050919050565b611121612172565b73ffffffffffffffffffffffffffffffffffffffff1661113f611631565b73ffffffffffffffffffffffffffffffffffffffff1614611195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118c90613eaa565b60405180910390fd5b80600c90805190602001906111ab929190613517565b5050565b600e5481565b60006111c08261293f565b600001519050919050565b6111d3612172565b73ffffffffffffffffffffffffffffffffffffffff166111f1611631565b73ffffffffffffffffffffffffffffffffffffffff1614611247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123e90613eaa565b60405180910390fd5b80600d8190555050565b600c805461125e90613ef9565b80601f016020809104026020016040519081016040528092919081815260200182805461128a90613ef9565b80156112d75780601f106112ac576101008083540402835291602001916112d7565b820191906000526020600020905b8154815290600101906020018083116112ba57829003601f168201915b505050505081565b6112e7612172565b73ffffffffffffffffffffffffffffffffffffffff16611305611631565b73ffffffffffffffffffffffffffffffffffffffff161461135b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135290613eaa565b60405180910390fd5b80600f8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113cd576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b61143d612172565b73ffffffffffffffffffffffffffffffffffffffff1661145b611631565b73ffffffffffffffffffffffffffffffffffffffff16146114b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a890613eaa565b60405180910390fd5b6114bb6000612bca565b565b6114c5612172565b73ffffffffffffffffffffffffffffffffffffffff166114e3611631565b73ffffffffffffffffffffffffffffffffffffffff1614611539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153090613eaa565b60405180910390fd5b600f5461155682611548610bc3565b612c9090919063ffffffff16565b1115611597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158e90614118565b60405180910390fd5b6115a18282612cee565b5050565b6115ad612172565b73ffffffffffffffffffffffffffffffffffffffff166115cb611631565b73ffffffffffffffffffffffffffffffffffffffff1614611621576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161890613eaa565b60405180910390fd5b8060118190555050565b600d5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611663612172565b73ffffffffffffffffffffffffffffffffffffffff16611681611631565b73ffffffffffffffffffffffffffffffffffffffff16146116d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ce90613eaa565b60405180910390fd5b6002811415611710576001601360006101000a81548160ff0219169083600181111561170657611705614138565b5b021790555061173c565b6000601360006101000a81548160ff0219169083600181111561173657611735614138565b5b02179055505b50565b60606003805461174e90613ef9565b80601f016020809104026020016040519081016040528092919081815260200182805461177a90613ef9565b80156117c75780601f1061179c576101008083540402835291602001916117c7565b820191906000526020600020905b8154815290600101906020018083116117aa57829003601f168201915b5050505050905090565b6117d9612172565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561183e576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806007600061184b612172565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118f8612172565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161193d91906136b1565b60405180910390a35050565b611954848484612415565b6119738373ffffffffffffffffffffffffffffffffffffffff166120d5565b156119bb5761198484848484612d0c565b6119ba576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6119c9612172565b73ffffffffffffffffffffffffffffffffffffffff166119e7611631565b73ffffffffffffffffffffffffffffffffffffffff1614611a3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3490613eaa565b60405180910390fd5b80600e8190555050565b6002600b541415611a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a84906141b3565b60405180910390fd5b6002600b81905550601060009054906101000a900460ff16611ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adb90614245565b60405180910390fd5b600e54811115611b29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b20906142d7565b60405180910390fd5b60008111611b6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6390614343565b60405180910390fd5b600f54611b8982611b7b610bc3565b612c9090919063ffffffff16565b1115611bca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc1906143d5565b60405180910390fd5b6000611bd5336128d5565b90506000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601154111580611c2b57508160115411155b15611c8557600d5483611c3e9190613fec565b341015611c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7790614441565b60405180910390fd5b611ce6565b600d54600184611c959190614461565b611c9f9190613fec565b341015611ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd890614441565b60405180910390fd5b600190505b611cf03384612cee565b8015611d86576001601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d429190614495565b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b50506001600b8190555050565b6060611d9e82612310565b611ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd490614537565b60405180910390fd5b600180811115611df057611def614138565b5b601360009054906101000a900460ff166001811115611e1257611e11614138565b5b1415611e76576000600c8054611e2790613ef9565b905011611e435760405180602001604052806000815250611e6f565b600c611e4e83612e5d565b604051602001611e5f929190614627565b6040516020818303038152906040525b9050611ed0565b6000600c8054611e8590613ef9565b905011611ea15760405180602001604052806000815250611ecd565b600c611eac83612e5d565b604051602001611ebd929190614697565b6040516020818303038152906040525b90505b919050565b6000611ee0826128d5565b9050919050565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b601060009054906101000a900460ff1681565b611fdf612172565b73ffffffffffffffffffffffffffffffffffffffff16611ffd611631565b73ffffffffffffffffffffffffffffffffffffffff1614612053576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204a90613eaa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ba90614738565b60405180910390fd5b6120cc81612bca565b50565b600f5481565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061216b575061216a82612fbe565b5b9050919050565b600033905090565b6121826128cb565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff1611156121e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d7906147ca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612250576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224790614836565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600860008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b60008161231b612410565b1115801561232a575060005482105b8015612357575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b60006124208261293f565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461248b576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166124ac612172565b73ffffffffffffffffffffffffffffffffffffffff1614806124db57506124da856124d5612172565b611f30565b5b8061252057506124e9612172565b73ffffffffffffffffffffffffffffffffffffffff1661250884610a3c565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612559576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156125c0576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125cd85858560016130a0565b6125d96000848761235e565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561285957600054821461285857878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128c485858560016130a6565b5050505050565b6000612710905090565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b61294761359d565b600082905080612955612410565b11612b9357600054811015612b92576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612b9057600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612a74578092505050612bc5565b5b600115612b8f57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612b8a578092505050612bc5565b612a75565b5b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808284612c9f9190614495565b905083811015612ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cdb906148a2565b60405180910390fd5b8091505092915050565b612d088282604051806020016040528060008152506130ac565b5050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d32612172565b8786866040518563ffffffff1660e01b8152600401612d549493929190614917565b6020604051808303816000875af1925050508015612d9057506040513d601f19601f82011682018060405250810190612d8d9190614978565b60015b612e0a573d8060008114612dc0576040519150601f19603f3d011682016040523d82523d6000602084013e612dc5565b606091505b50600081511415612e02576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60606000821415612ea5576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612fb9565b600082905060005b60008214612ed7578080612ec0906149a5565b915050600a82612ed09190614075565b9150612ead565b60008167ffffffffffffffff811115612ef357612ef2613b1a565b5b6040519080825280601f01601f191660200182016040528015612f255781602001600182028036833780820191505090505b5090505b60008514612fb257600182612f3e9190614461565b9150600a85612f4d91906149ee565b6030612f599190614495565b60f81b818381518110612f6f57612f6e614a1f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612fab9190614075565b9450612f29565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061308957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061309957506130988261346e565b5b9050919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613119576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000831415613154576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61316160008583866130a0565b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600084820190506133228673ffffffffffffffffffffffffffffffffffffffff166120d5565b156133e7575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46133976000878480600101955087612d0c565b6133cd576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082106133285782600054146133e257600080fd5b613452565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082106133e8575b81600081905550505061346860008583866130a6565b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6040518060e001604052806000815260200160008152602001600081526020016000151581526020016000815260200160008152602001600081525090565b82805461352390613ef9565b90600052602060002090601f016020900481019282613545576000855561358c565b82601f1061355e57805160ff191683800117855561358c565b8280016001018555821561358c579182015b8281111561358b578251825591602001919060010190613570565b5b50905061359991906135e0565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156135f95760008160009055506001016135e1565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61364681613611565b811461365157600080fd5b50565b6000813590506136638161363d565b92915050565b60006020828403121561367f5761367e613607565b5b600061368d84828501613654565b91505092915050565b60008115159050919050565b6136ab81613696565b82525050565b60006020820190506136c660008301846136a2565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006136f7826136cc565b9050919050565b613707816136ec565b811461371257600080fd5b50565b600081359050613724816136fe565b92915050565b60006bffffffffffffffffffffffff82169050919050565b61374b8161372a565b811461375657600080fd5b50565b60008135905061376881613742565b92915050565b6000806040838503121561378557613784613607565b5b600061379385828601613715565b92505060206137a485828601613759565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b838110156137e85780820151818401526020810190506137cd565b838111156137f7576000848401525b50505050565b6000601f19601f8301169050919050565b6000613819826137ae565b61382381856137b9565b93506138338185602086016137ca565b61383c816137fd565b840191505092915050565b60006020820190508181036000830152613861818461380e565b905092915050565b6000819050919050565b61387c81613869565b811461388757600080fd5b50565b60008135905061389981613873565b92915050565b6000602082840312156138b5576138b4613607565b5b60006138c38482850161388a565b91505092915050565b6138d5816136ec565b82525050565b60006020820190506138f060008301846138cc565b92915050565b6000806040838503121561390d5761390c613607565b5b600061391b85828601613715565b925050602061392c8582860161388a565b9150509250929050565b61393f81613869565b82525050565b600060208201905061395a6000830184613936565b92915050565b60008060006060848603121561397957613978613607565b5b600061398786828701613715565b935050602061399886828701613715565b92505060406139a98682870161388a565b9150509250925092565b600080604083850312156139ca576139c9613607565b5b60006139d88582860161388a565b92505060206139e98582860161388a565b9150509250929050565b6000604082019050613a0860008301856138cc565b613a156020830184613936565b9392505050565b600060208284031215613a3257613a31613607565b5b6000613a4084828501613715565b91505092915050565b613a5281613869565b82525050565b613a6181613696565b82525050565b60e082016000820151613a7d6000850182613a49565b506020820151613a906020850182613a49565b506040820151613aa36040850182613a49565b506060820151613ab66060850182613a58565b506080820151613ac96080850182613a49565b5060a0820151613adc60a0850182613a49565b5060c0820151613aef60c0850182613a49565b50505050565b600060e082019050613b0a6000830184613a67565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613b52826137fd565b810181811067ffffffffffffffff82111715613b7157613b70613b1a565b5b80604052505050565b6000613b846135fd565b9050613b908282613b49565b919050565b600067ffffffffffffffff821115613bb057613baf613b1a565b5b613bb9826137fd565b9050602081019050919050565b82818337600083830152505050565b6000613be8613be384613b95565b613b7a565b905082815260208101848484011115613c0457613c03613b15565b5b613c0f848285613bc6565b509392505050565b600082601f830112613c2c57613c2b613b10565b5b8135613c3c848260208601613bd5565b91505092915050565b600060208284031215613c5b57613c5a613607565b5b600082013567ffffffffffffffff811115613c7957613c7861360c565b5b613c8584828501613c17565b91505092915050565b613c9781613696565b8114613ca257600080fd5b50565b600081359050613cb481613c8e565b92915050565b60008060408385031215613cd157613cd0613607565b5b6000613cdf85828601613715565b9250506020613cf085828601613ca5565b9150509250929050565b600067ffffffffffffffff821115613d1557613d14613b1a565b5b613d1e826137fd565b9050602081019050919050565b6000613d3e613d3984613cfa565b613b7a565b905082815260208101848484011115613d5a57613d59613b15565b5b613d65848285613bc6565b509392505050565b600082601f830112613d8257613d81613b10565b5b8135613d92848260208601613d2b565b91505092915050565b60008060008060808587031215613db557613db4613607565b5b6000613dc387828801613715565b9450506020613dd487828801613715565b9350506040613de58782880161388a565b925050606085013567ffffffffffffffff811115613e0657613e0561360c565b5b613e1287828801613d6d565b91505092959194509250565b60008060408385031215613e3557613e34613607565b5b6000613e4385828601613715565b9250506020613e5485828601613715565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613e946020836137b9565b9150613e9f82613e5e565b602082019050919050565b60006020820190508181036000830152613ec381613e87565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613f1157607f821691505b60208210811415613f2557613f24613eca565b5b50919050565b7f5265717565737420776f756c64206578636565642062616c616e6365206f662060008201527f7468697320636f6e747261637400000000000000000000000000000000000000602082015250565b6000613f87602d836137b9565b9150613f9282613f2b565b604082019050919050565b60006020820190508181036000830152613fb681613f7a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ff782613869565b915061400283613869565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561403b5761403a613fbd565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061408082613869565b915061408b83613869565b92508261409b5761409a614046565b5b828204905092915050565b7f5265717565737420776f756c6420657863656564206d617820737570706c792060008201527f6f6620746f6b656e730000000000000000000000000000000000000000000000602082015250565b60006141026029836137b9565b915061410d826140a6565b604082019050919050565b60006020820190508181036000830152614131816140f5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600061419d601f836137b9565b91506141a882614167565b602082019050919050565b600060208201905081810360008301526141cc81614190565b9050919050565b7f53616c65206d7573742062652061637469766520746f206d696e7420746f6b6560008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b600061422f6021836137b9565b915061423a826141d3565b604082019050919050565b6000602082019050818103600083015261425e81614222565b9050919050565b7f546865206e756d626572206f6620746f6b656e7320706572207472616e73616360008201527f74696f6e20657863656564732074686520616c6c6f776564206e756d62657200602082015250565b60006142c1603f836137b9565b91506142cc82614265565b604082019050919050565b600060208201905081810360008301526142f0816142b4565b9050919050565b7f596f75206d757374206d696e74206174206c65617374206f6e6520746f6b656e600082015250565b600061432d6020836137b9565b9150614338826142f7565b602082019050919050565b6000602082019050818103600083015261435c81614320565b9050919050565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f6620746f6b656e7300000000000000000000000000000000000000000000602082015250565b60006143bf602a836137b9565b91506143ca82614363565b604082019050919050565b600060208201905081810360008301526143ee816143b2565b9050919050565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b600061442b601f836137b9565b9150614436826143f5565b602082019050919050565b6000602082019050818103600083015261445a8161441e565b9050919050565b600061446c82613869565b915061447783613869565b92508282101561448a57614489613fbd565b5b828203905092915050565b60006144a082613869565b91506144ab83613869565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144e0576144df613fbd565b5b828201905092915050565b7f546f6b656e20646f6573206e6f742065786973742e0000000000000000000000600082015250565b60006145216015836137b9565b915061452c826144eb565b602082019050919050565b6000602082019050818103600083015261455081614514565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b6000815461458481613ef9565b61458e8186614557565b945060018216600081146145a957600181146145ba576145ed565b60ff198316865281860193506145ed565b6145c385614562565b60005b838110156145e5578154818901526001820191506020810190506145c6565b838801955050505b50505092915050565b6000614601826137ae565b61460b8185614557565b935061461b8185602086016137ca565b80840191505092915050565b60006146338285614577565b915061463f82846145f6565b91508190509392505050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000614681600583614557565b915061468c8261464b565b600582019050919050565b60006146a38285614577565b91506146af82846145f6565b91506146ba82614674565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006147226026836137b9565b915061472d826146c6565b604082019050919050565b6000602082019050818103600083015261475181614715565b9050919050565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b60006147b4602a836137b9565b91506147bf82614758565b604082019050919050565b600060208201905081810360008301526147e3816147a7565b9050919050565b7f455243323938313a20696e76616c696420726563656976657200000000000000600082015250565b60006148206019836137b9565b915061482b826147ea565b602082019050919050565b6000602082019050818103600083015261484f81614813565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061488c601b836137b9565b915061489782614856565b602082019050919050565b600060208201905081810360008301526148bb8161487f565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006148e9826148c2565b6148f381856148cd565b93506149038185602086016137ca565b61490c816137fd565b840191505092915050565b600060808201905061492c60008301876138cc565b61493960208301866138cc565b6149466040830185613936565b818103606083015261495881846148de565b905095945050505050565b6000815190506149728161363d565b92915050565b60006020828403121561498e5761498d613607565b5b600061499c84828501614963565b91505092915050565b60006149b082613869565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156149e3576149e2613fbd565b5b600182019050919050565b60006149f982613869565b9150614a0483613869565b925082614a1457614a13614046565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220b68e79bf6b0d662258e54b9fac35bb737f4186bd7d189e85662e19c8408265d464736f6c634300080a003368747470733a2f2f6e6674736572766963652e73332e616d617a6f6e6177732e636f6d2f676f626c696e736f6c646965722f