6080604052606060405190810160405280602581526020017f446563656e7472616c697a656420416666696c696174652053696c766572205481526020017f6f6b656e5300000000000000000000000000000000000000000000000000000081525060009080519060200190620000789291906200018f565b506040805190810160405280600581526020017f444153545300000000000000000000000000000000000000000000000000000081525060019080519060200190620000c69291906200018f565b506012600260006101000a81548160ff021916908360ff1602179055506b033b2e3c9fd0803ce80000006003556064600a600354028115156200010557fe5b04600455680ad78ebc5ac62000006005556000600660006101000a81548160ff0219169083151502179055503480156200013e57600080fd5b5060045460035403600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506200023e565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001d257805160ff191683800117855562000203565b8280016001018555821562000203579182015b8281111562000202578251825591602001919060010190620001e5565b5b50905062000212919062000216565b5090565b6200023b91905b80821115620002375760008160009055506001016200021d565b5090565b90565b6118a7806200024e6000396000f300608060405260043610610107576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde0314610111578063095ea7b3146101a157806318160ddd1461020657806323b872dd14610231578063313ce567146102b65780633222ae71146102e757806342966c68146103165780634644d17e1461035b5780634ea49b5d146103655780635ed81ebe146103c05780636614b24e1461042057806370a082311461047b57806379cc6790146104d257806395d89b41146105375780639e69940d146105c7578063a9059cbb146105f2578063cae9ca511461063f578063dd62ed3e146106ea578063fb6b18c014610761575b61010f61078c565b005b34801561011d57600080fd5b506101266108e0565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561016657808201518184015260208101905061014b565b50505050905090810190601f1680156101935780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156101ad57600080fd5b506101ec600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061097e565b604051808215151515815260200191505060405180910390f35b34801561021257600080fd5b5061021b610a0b565b6040518082815260200191505060405180910390f35b34801561023d57600080fd5b5061029c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a11565b604051808215151515815260200191505060405180910390f35b3480156102c257600080fd5b506102cb610b3e565b604051808260ff1660ff16815260200191505060405180910390f35b3480156102f357600080fd5b506102fc610b51565b604051808215151515815260200191505060405180910390f35b34801561032257600080fd5b5061034160048036038101908080359060200190929190505050610b64565b604051808215151515815260200191505060405180910390f35b61036361078c565b005b34801561037157600080fd5b506103a6600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c68565b604051808215151515815260200191505060405180910390f35b61041e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c88565b005b34801561042c57600080fd5b50610461600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610dee565b604051808215151515815260200191505060405180910390f35b34801561048757600080fd5b506104bc600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e0e565b6040518082815260200191505060405180910390f35b3480156104de57600080fd5b5061051d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e26565b604051808215151515815260200191505060405180910390f35b34801561054357600080fd5b5061054c611040565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561058c578082015181840152602081019050610571565b50505050905090810190601f1680156105b95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156105d357600080fd5b506105dc6110de565b6040518082815260200191505060405180910390f35b3480156105fe57600080fd5b5061063d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110e4565b005b34801561064b57600080fd5b506106d0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506110f3565b604051808215151515815260200191505060405180910390f35b3480156106f657600080fd5b5061074b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611276565b6040518082815260200191505060405180910390f35b34801561076d57600080fd5b5061077661129b565b6040518082815260200191505060405180910390f35b600080600660009054906101000a900460ff161515156107ab57600080fd5b60001515600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514151561080a57600080fd5b6004546005541115151561081d57600080fd5b339150600554905061082f82826112a1565b506000811115610892576001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600060045414156108b9576001600660006101000a81548160ff0219169083151502179055505b6108d6670b1a2bc2ec5000006005546113df90919063ffffffff16565b6005819055505050565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156109765780601f1061094b57610100808354040283529160200191610976565b820191906000526020600020905b81548152906001019060200180831161095957829003601f168201915b505050505081565b600081600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001905092915050565b60035481565b6000600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610a9e57600080fd5b81600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540392505081905550610b338484846113fb565b600190509392505050565b600260009054906101000a900460ff1681565b600660009054906101000a900460ff1681565b600081600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610bb457600080fd5b81600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540392505081905550816003600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5836040518082815260200191505060405180910390a260019050919050565b60076020528060005260406000206000915054906101000a900460ff1681565b60006064603260055402811515610c9b57fe5b049050600454811115610cae5760045490505b600082118015610d0e575060001515600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b15610d77576001600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610d75848261171c565b505b600082118015610dd7575060001515600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b15610de857610de6838261171c565b505b50505050565b60086020528060005260406000206000915054906101000a900460ff1681565b60096020528060005260406000206000915090505481565b600081600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610e7657600080fd5b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610f0157600080fd5b81600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540392505081905550816003600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5836040518082815260200191505060405180910390a26001905092915050565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110d65780601f106110ab576101008083540402835291602001916110d6565b820191906000526020600020905b8154815290600101906020018083116110b957829003601f168201915b505050505081565b60055481565b6110ef3383836113fb565b5050565b600080849050611103858561097e565b1561126d578073ffffffffffffffffffffffffffffffffffffffff16638f4ffcb1338630876040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156111fd5780820151818401526020810190506111e2565b50505050905090810190601f16801561122a5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561124c57600080fd5b505af1158015611260573d6000803e3d6000fd5b505050506001915061126e565b5b509392505050565b600a602052816000526040600020602052806000526040600020600091509150505481565b60045481565b6000600660009054906101000a900460ff161515156112bf57600080fd5b6112d4826004546113df90919063ffffffff16565b60048190555061132c82600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461185a90919063ffffffff16565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b60008282111515156113f057600080fd5b818303905092915050565b6000808373ffffffffffffffffffffffffffffffffffffffff161415151561142257600080fd5b81600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561147057600080fd5b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054011115156114fe57600080fd5b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205401905081600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a380600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540114151561170b57fe5b611716848484610c88565b50505050565b6000600660009054906101000a900460ff16151561185357611749826004546113df90919063ffffffff16565b6004819055506117a182600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461185a90919063ffffffff16565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050611854565b5b92915050565b600080828401905083811015151561187157600080fd5b80915050929150505600a165627a7a723058203c6333efa2af9f9f494ca633a8063f98388a4aa05b1127cc9c566971e580985a0029