def _get(self, bucket, src, dst, src_size=-1, src_etag=''): if self._exclude(src): return headers = {} try: size = os.path.getsize(dst) if self.opts.ignore: return buf = open(dst).read() etags = [ md5.md5(buf).hexdigest() ] if src_size != size: if os.path.splitext(dst)[1].lower() not in self.compressed_exts: etags.append(md5.md5(self._gzip_string(buf)).hexdigest()) if src_etag in etags: return headers['If-None-Match'] = etags except OSError: pass r = self.conn.get(bucket, src, headers) if r.http_response.status == 200: if self.opts.verbose: print dst buf = r.object.data if r.http_response.getheader('content-encoding', '') == 'gzip': buf = gzip.GzipFile(fileobj=cStringIO.StringIO(buf)).read() f = open(dst, 'wb'); f.write(buf); f.close() self._fix_attrs(dst, r.object.metadata) elif r.http_response.status != 304: self._perror(r)
def test_invite_freelancer(self): self.job_id = "2" self.job_name = "nombre" self.code = md5.md5(self.job_id).hexdigest() job = Job(id=self.job_id,offer=self.user, code=self.code) job.save() c = Classification.objects.get(id=1) jc = Job_classification(job=job,classification=c) jc.save() email = "*****@*****.**" u2 = User(first_name=self.first_name, email=email,username=email, last_name=self.last_name) u2.set_password(self.password) u2.save() freelancer = Freelancer(user=u2,web_site=self.web_site, address=self.address, phone=self.phone, country=self.country, city=self.city) freelancer.save() s_id = '3' service = Job(id=s_id, offer=u2,_type='1',state=1,code=md5.md5(s_id).hexdigest()) service.save() job_s = Job_classification(classification=c, job=service) job_s.save() response = self.client.get('/invite_freelancers/'+self.code) self.assertEqual(len(response.context['freelancers']),1)
def _put(self, bucket, filename, key, etag=''): headers = {} st = os.lstat(filename) if not stat.S_ISREG(st[stat.ST_MODE]): print >>sys.stderr, 'skipping non-file', filename return if not st[stat.ST_SIZE]: return obj = S3.S3Object(open(filename).read(), metadata={ 'mode':str(stat.S_IMODE(st[stat.ST_MODE])), 'uid':str(st[stat.ST_UID]), 'gid':str(st[stat.ST_GID]), 'atime':str(st[stat.ST_ATIME]), 'mtime':str(st[stat.ST_MTIME]), }) etags = [ md5.md5(obj.data).hexdigest() ] if self.opts.compress: ext = os.path.splitext(filename)[1].lower() if ext not in self.compressed_exts: obj.data = self._gzip_string(obj.data) headers['Content-Encoding'] = 'gzip' etags.append(md5.md5(obj.data).hexdigest()) if etag not in etags: if self.opts.verbose: print key r = self.conn.put(bucket, key, obj, headers=headers) if r.http_response.status != 200: self._perror(r)
def setUp(self): self.cmd = Object(**{ "deviceConfig": Object(**{ "device": "localhost", "lastmodeltime": "lastmodeltime" }), "command": "command", "component": "url_" + md5("defunct").hexdigest().strip(), "includeRegex": ".*defunct.*", "excludeRegex": "nothing", "replaceRegex": ".*", "replacement": "defunct", "primaryUrlPath": "url", "displayName": "defunct process set", "eventKey": "bar", "severity": 1, "generatedId": "url_" + md5("defunct").hexdigest().strip(), "points": [ Object(**{ "id": "cpu_cpu", "data": { "id": "url_defunct", "alertOnRestart": False, "failSeverity": 0 } }) ] }) self.cmd.result = Object(**{"exitCode": 0})
def get_gavatar_url(email, size=80, default_image=3, rating=0, extension=".png",default_url = None,force_default=False): if default_image not in DEFAULT_IMAGE_DICT and default_url is None: default_image = 3 if rating not in RATING_DICT: rating = 0 email = str(email).lower().strip() if default_url : if force_default: return GRAVATAR_PREFIX + md5.md5(email).hexdigest() + extension + \ "?s=" + str(size) + \ "&r=" + RATING_DICT[rating] + \ "&" + urllib.urlencode({'d':default_url}) + \ "&f=y" else : return GRAVATAR_PREFIX + md5.md5(email).hexdigest() + extension + \ "?s=" + str(size) + \ "&r=" + RATING_DICT[rating] + \ "&" + urllib.urlencode({'d':default_url}) else : if force_default: return GRAVATAR_PREFIX + md5.md5(email).hexdigest() + extension + \ "?s=" + str(size) + \ "&r=" + RATING_DICT[rating] + \ "&d=" + DEFAULT_IMAGE_DICT[default_image] + \ "&f=y" else : return GRAVATAR_PREFIX + md5.md5(email).hexdigest() + extension + \ "?s=" + str(size) + \ "&r=" + RATING_DICT[rating] + \ "&d=" + DEFAULT_IMAGE_DICT[default_image]
def user_edit_password(): form = EditPasswordForm() if form.validate_on_submit(): username = session["name"] op = form.originPassword.data if not db.user.find_and_modify( query={ "name": username, "password": binary.Binary(md5.md5(op).digest()) }, update={ "$set": { "password": binary.Binary(md5.md5(form.newPassword.data).digest()) } }, ): return u"密码错误, 就是不对" else: return u"修改成功, 自己刷新回去吧" return render_template_string( "{% from 'form_macro.html' import render_errors %}\ <form method='post' action={{ url_for('user.user_edit_password') }} >\ {{ form.hidden_tag() }} \ {{ form.originPassword.label }}\ {{ form.originPassword }} {{ render_errors(form.originPassword) }} <br>\ {{ form.newPassword.label }}\ {{ form.newPassword }} {{ render_errors(form.newPassword) }}<br>\ {{ form.rePassword.label }}\ {{ form.rePassword }} {{ render_errors(form.rePassword) }} <br>\ {{ form.submit }} \ </form>", form=form)
def compute_encryption_key(self, password = ""): """Algorithm 3.2. Compute the key used to decode strings and streams. Returns None if the user password does not pass the simple password test.""" password = (password + self.PasswordPad)[:32] m = md5.md5() m.update(password) m.update(self.O) P = struct.pack("<L", self.P) m.update(P) m.update(self.id1) x = m.digest() if self.R == 3: for i in range(50): x = md5.md5(x).digest() key = x[:self.Length] #-- if this key is right, then ecrypting the pad string will # yield the U value. Ucheck = RC4(key).crypt(self.PasswordPad) if Ucheck != self.U: # try skipping steps 3 4 and 5. key = md5.md5(password).digest()[:5] Ucheck = RC4(key).crypt(self.PasswordPad) if Ucheck != self.U: return None return key
def main(): args = parser.parse_args() logging.basicConfig(level=LEVELS[args.verbosity]) srcs = set(get_files(args.source, excludes=args.excludes)) dsts = set(get_files(args.dest, excludes=args.excludes)) for extra in dsts - srcs: dst = os.path.join(args.dest, extra) logger.info("del {}".format(dst)) os.unlink(dst) for common in srcs & dsts: src = os.path.join(args.source, common) dst = os.path.join(args.dest, common) src_sig = md5.md5(open(src, "rb").read()).hexdigest() dst_sig = md5.md5(open(dst, "rb").read()).hexdigest() if src_sig != dst_sig: logger.info("{} X-> {}".format(src, dst)) logger.debug("{} vs {}".format(src_sig, dst_sig)) os.unlink(dst) shutil.copy2( src, dst, ) for tocreate in srcs - dsts: src = os.path.join(args.source, tocreate) dst = os.path.join(args.dest, tocreate) logger.info("{} -> {}".format(src, dst)) directory = os.path.dirname(dst) if not os.path.exists(directory): os.makedirs(directory) shutil.copy2( src, dst, )
def check_flags(host): # Check the public flags results = {} # Check the web flag try: lighttpd_flag = requests.get("http://%s" % host, timeout=2).text web_hash = md5.md5(lighttpd_flag).hexdigest() results['web'] = web_hash == "fa477c36d6c52d52bbd9b6af7df708fa" except: results['web'] = False # Check the ftp flag try: ftp_conn = FTP(host, user="******", passwd="password", timeout=2) ss = StringIO.StringIO() ftp_conn.retrbinary("RETR file", ss.write) ftp_hash = md5.md5(ss.getvalue()).hexdigest() ss.close() results['ftp'] = ftp_hash == "4d91498a12508cd7f51fe6d5265ee521" except: results['ftp'] = False log.info("Flags for %s: web is %s | ftp is %s." % (host, "unmodified" if results['web'] else "modified", "unmodified" if results['ftp'] else "modified")) return results
def process_response(self, request, response): if response['Content-Type'].startswith('text/html') and settings.CACHE_BACKEND not in ['', None, 'dummy:///']: soup = BeautifulSoup(response.content) head = soup.head #[script.extract() for script in head.findAll(lambda x: x.name == 'script' and 'src' in dict(x.attrs) and x['src'].startswith(settings.MEDIA_URL) )] #[css.extract() for css in head.findAll(lambda x: x.name == 'link' and 'href' in dict(x.attrs) and x['href'].startswith(settings.MEDIA_URL) )] scripts = head.findAll(lambda x: x.name == 'script' and 'src' in dict(x.attrs) and x['src'].startswith(settings.MEDIA_URL) ) css = head.findAll(lambda x: x.name == 'link' and 'href' in dict(x.attrs) and x['href'].startswith(settings.MEDIA_URL) ) script_sources = [x['src'] for x in scripts] new_script = md5(boundary.join(script_sources)).hexdigest() cache.set(new_script, script_sources) [x.extract() for x in scripts] css_sources = [x['href'] for x in css] new_css = md5(boundary.join(css_sources)).hexdigest() cache.set(new_css, css_sources) [x.extract() for x in css] tag = Tag(soup, "script", [("type", "text/javascript"), ("src", reverse('cached_asset', kwargs={'asset':new_script+".js"}) )]) head.insert(0, tag) tag = Tag(soup, "link", [("type", "text/css"), ("href", reverse('cached_asset', kwargs={'asset':new_css+".css"})), ('rel', 'stylesheet')]) head.insert(0, tag) response.content = soup.prettify() return response
def main(): print " " resp = raw_input("Choose your encode: ") print " " if resp == "md5": for _ in range(100): print " " md5() elif resp == "base64": for _ in range(100): print " " base() elif resp == "hex": for _ in range(100): print " " hexa() elif resp == "url": pr = "----URL+ENCODER----" print pr.center(80, ' ') for _ in range(100): print " " urlenc() elif resp == "top": main() else: print "Bad input." sys.exit()
def login(request, error=''): if checkLogin(request): return HttpResponseRedirect("/wm/index") elif request.method == "POST": lF = loginForm(request.POST) if lF.is_valid(): data = lF.cleaned_data try: u = User.objects.get(stuNum=data['stuNum'], erase=0) except User.DoesNotExist: errorList = "用户名错误" lF = loginForm() return render_to_response("wm/login.html", {"form": lF,"error":errorList,}, context_instance=RequestContext(request)) if u.password == md5(md5(data['password']).hexdigest()+u.salt).hexdigest(): request.session['user'] = u request.session.set_expiry(0) return HttpResponseRedirect("/wm/index/") else: errorList = "密码错误" return render_to_response("wm/login.html", {"form": lF,"error":errorList,}, context_instance=RequestContext(request)) else: return HttpResponseRedirect("/wm/login") else: lF = loginForm() return render_to_response("wm/login.html", {"form": lF,"error":error,}, context_instance=RequestContext(request))
def mine_presents(key): hash = md5(key + str(0)) count = 0 while not hash.hexdigest()[:6] == '000000': count += 1 hash = md5(key + str(count)) return count, hash.hexdigest()
def localize_image(path, out_dir): new_path = out_dir + "/" + os.path.basename(path) if path.startswith("http://") or path.startswith("https://"): local_name = "/tmp/pic_" + os.path.basename(path).replace("/", "") with open(local_name, "wb") as f: f.write(Downloader().download(path)) path = local_name if not os.path.exists(path): return path if os.path.exists(new_path): path_md5 = md5(open(path).read()).hexdigest() new_path_md5 = md5(open(new_path).read()).hexdigest() if path_md5 != new_path_md5: while os.path.exists(new_path): suffix = new_path.rsplit(".", 1)[1] new_path = md5(os.path.basename(new_path)).hexdigest() new_path = out_dir + "/" + new_path + "." + suffix if not os.path.exists(new_path): if path.startswith("http://") or path.startswith("https://"): with open(new_path, "wb") as f: f.write(Downloader().download(path)) else: shutil.copy(path, new_path) return "./" + os.path.basename(new_path)
def handle(self, *args, **options): while True: username = raw_input('请输入用户名(至少5位字符):') if len(username.decode('utf8')) > 4: break else: self.stdout.write(u'============输入的用户名无效,请重新输入============') while True: pwd = getpass.getpass('请输入密码(至少5位字符):') if len(pwd.decode('utf8')) > 4: break else: self.stdout.write(u'============输入的密码无效,请重新输入============') import md5 from django.contrib.auth.models import User md5_pwd = md5.md5(md5.md5(pwd).hexdigest()).hexdigest() try: User.objects.create_superuser(username, None, md5_pwd) self.stdout.write(u'============管理员%s创建成功============'%username) except: self.stdout.write(u'============用户名已存在============') print 'exit.'
def join(): if not request.values['name'] or not request.values['email'] or not request.values['password'] or not request.values['password1']: flash('Invalid') return redirect(url_for('index')) else: password = md5.md5(request.values['password']).hexdigest() password1 = md5.md5(request.values['password1']).hexdigest() if password != password1: flash('Password not matched') return redirect(url_for('join')) else: email = request.values['email'] confirm_email = User1.query.filter_by(email = email).first() if confirm_email: flash('E-mail already exists') return redirect(url_for('join')) else: email = request.values['email'] name = request.values['name'] new_account = User1(email,name,password) db.session.add(new_account) db.session.commit() flash('New entry was successfully posted') return redirect(url_for('index'))
def compute( self, ha1, username, response, method, path, nonce, nc, cnonce, qop ): """Computes the authentication, raises error if unsuccessful """ if not ha1: return self.build_authentication() ha2 = md5.md5('%s:%s' % (method,path)).hexdigest() if qop: chk = "%s:%s:%s:%s:%s:%s" % (ha1,nonce,nc,cnonce,qop,ha2) else: chk = "%s:%s:%s" % (ha1,nonce,ha2) if response != md5.md5(chk).hexdigest(): if nonce in self.nonce: del self.nonce[nonce] return self.build_authentication() pnc = self.nonce.get(nonce,'00000000') if nc <= pnc: if nonce in self.nonce: del self.nonce[nonce] return self.build_authentication(stale = True) self.nonce[nonce] = nc return username
def handshake(self, username, password, version): self.username = username self.password = password timestamp = str(int(time.time())) auth = self.hexify(md5.md5(password).digest()) auth = self.hexify(md5.md5(auth + timestamp).digest()) req = "/?hs=true&p=1.2&c=" + self.clientid + "&v=" + self.clientversion + "&u=" + username + "&t=" + timestamp + "&a=" + auth s = httpclient.httpclient(self.handshakeurl) s.req(req) reslines = string.split(s.response, "\n") if self.debug: print "audioscrobbler: handshake " + reslines[0] if reslines[0] != "OK": print "audioscrobbler: Handshake error:" print repr(s.response) return True self.session = reslines[1] self.nowplayingurl = reslines[2] self.submiturl = reslines[3] return False
def _md5crypt(password, the_hash): magic, salt = the_hash[1:].split('$')[:2] magic = '$' + magic + '$' # /* The password first, since that is what is most unknown */ /* Then our magic string */ /* Then the raw salt */ m = md5.new() m.update(password + magic + salt) # /* Then just as many characters of the MD5(pw,salt,pw) */ mixin = md5.md5(password + salt + password).digest() for i in range(0, len(password)): m.update(mixin[i % 16]) # /* Then something really weird... */ # Also really broken, as far as I can tell. -m i = len(password) while i: if i & 1: m.update('\x00') else: m.update(password[0]) i >>= 1 final = m.digest() # /* and now, just to make sure things don't run too fast */ for i in range(1000): m2 = md5.md5() if i & 1: m2.update(password) else: m2.update(final) if i % 3: m2.update(salt) if i % 7: m2.update(password) if i & 1: m2.update(final) else: m2.update(password) final = m2.digest() # This is the bit that uses to64() in the original code. itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' rearranged = '' for a, b, c in ((0, 6, 12), (1, 7, 13), (2, 8, 14), (3, 9, 15), (4, 10, 5)): v = ord(final[a]) << 16 | ord(final[b]) << 8 | ord(final[c]) for i in range(4): rearranged += itoa64[v & 0x3f]; v >>= 6 v = ord(final[11]) for i in range(2): rearranged += itoa64[v & 0x3f]; v >>= 6 return magic + salt + '$' + rearranged
def reg_new(**argd): rec = { # --------------------------------------------------------- Required to create a new record 'dob.day' : argd.get("dob.day", ""), 'dob.month' : argd.get("dob.month", ""), 'dob.year' : argd.get("dob.year", ""), 'email' : argd.get("email", ""), 'password' : argd.get("password", ""), 'passwordtwo' : argd.get("passwordtwo", ""), 'screenname' : argd.get("screenname", ""), 'side' : argd.get("side", ""), } # --------------------------------------------------------- Sprinkle with default metadata rec["confirmed"] = False rec["confirmationcode"] = generate_confirmation_code() rec["personrecord"] = "" # -------------------------------------------- Validations... (lots of these) validate_record(rec) # Seperated out to a seperate function to make logic clearer # --------------------------------------------------------- TRANSFORMS FOR STORAGE # One way hash for security reasons before storage # NOTE: This means we always check the digest, not the value # This also means we can do a password reset, not a password reminder # if rec["password"] != "": rec["password"] = md5.md5(rec["password"]).hexdigest() if rec["passwordtwo"] != "": rec["passwordtwo"] = md5.md5(rec["passwordtwo"]).hexdigest() # --------------------------------------------------------- Actual storage stored_rec = Registrations.new_record(rec) return stored_rec
def DigestCalcResponse( HA1, pszNonce, pszNonceCount, pszCNonce, pszQop, pszMethod, pszDigestUri, pszHEntity, ): m = md5.md5() m.update(pszMethod) m.update(":") m.update(pszDigestUri) if pszQop == "auth-int": m.update(":") m.update(pszHEntity) HA2 = m.digest().encode('hex') m = md5.md5() m.update(HA1) m.update(":") m.update(pszNonce) m.update(":") if pszNonceCount and pszCNonce: # pszQop: m.update(pszNonceCount) m.update(":") m.update(pszCNonce) m.update(":") m.update(pszQop) m.update(":") m.update(HA2) hash = m.digest().encode('hex') return hash
def botlist_uuid(*args): """ Generates a universally unique ID. Any arguments only create more randomness. """ t = long( time.time() * 1000 ) r = long( random.random()*100000000000000000L ) try: a = socket.gethostbyname( socket.gethostname() ) except: # if we can't get a network address, just imagine one a = random.random()*100000000000000000L # Extra protection, additional unique md5 call t2 = long( time.time() * 1000 ) r2 = long( random.random()*100000000000000000L ) data = str(t)+' '+str(r)+' '+str(a)+' '+str(args) data = md5.md5(data).hexdigest() # Additional data2 = str(t2)+' '+str(r2)+' '+str(a)+' '+str(args) data2 = md5.md5(data2).hexdigest() # Final result uuid_data = "%s%s" % (data, data2) return uuid_data[0:42]
def bootstrap(username, password, tracks): timestamp = str(int(time.time())) auth = md5(md5(password).hexdigest() + timestamp).hexdigest() authlower = md5(md5(password).hexdigest().lower() + timestamp).hexdigest().lower() buffer = StringIO() buffer.write("--AaB03x\r\n") buffer.write("content-disposition: form-data; name=\"agency\"\r\n") buffer.write("\r\n") buffer.write("0\r\n") buffer.write("--AaB03x\r\n") buffer.write("content-disposition: form-data; name=\"bootstrap\"; filename=\"iTunes_bootstrap.xml.gz\"\r\n") buffer.write("Content-Transfer-Encoding: binary\r\n") buffer.write("\r\n") zip = gzip.GzipFile("iTunes_bootstrap.xml", "w", 6, buffer) zip.write("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n") zip.write("<bootstrap version=\"1.0\" product=\"iTunes\">\n") for track in tracks: zip.write(track_template % track) zip.write("</bootstrap>\n") zip.close() buffer.write("\r\n") buffer.write("--AaB03x--") buffer.seek(0) url_template = "http://bootstrap.last.fm/bootstrap/index.php?user=%(username)s&time=%(timestamp)s&auth=%(auth)s&authlower=%(authlower)s" url = url_template % {'username': username, 'timestamp': timestamp, 'auth': auth, 'authlower': authlower} headers = {"Content-type": "multipart/form-data, boundary=AaB03x", "Cache-Control": "no-cache", "Accept": "*/*"} urllib2.urlopen(urllib2.Request(url, buffer.read(), headers))
def test_more(): "Test cases without known digest result." cases = ( "123", "1234", "12345", "123456", "1234567", "12345678", "123456789 123456789 123456789 ", "123456789 123456789 ", "123456789 123456789 1", "123456789 123456789 12", "123456789 123456789 123", "123456789 123456789 1234", "123456789 123456789 123456789 1", "123456789 123456789 123456789 12", "123456789 123456789 123456789 123", "123456789 123456789 123456789 1234", "123456789 123456789 123456789 12345", "123456789 123456789 123456789 123456", "123456789 123456789 123456789 1234567", "123456789 123456789 123456789 12345678", ) for input in cases: d = rmd5.RMD5(input) assert d.hexdigest() == md5.md5(input).hexdigest() assert d.digest() == md5.md5(input).digest()
def encrypt(self, user_pwd, owner_pwd = None, use_128bit = True): import time, random if owner_pwd == None: owner_pwd = user_pwd if use_128bit: V = 2 rev = 3 keylen = 128 / 8 else: V = 1 rev = 2 keylen = 40 / 8 P = -1 O = ByteStringObject(_alg33(owner_pwd, user_pwd, rev, keylen)) ID_1 = md5(repr(time.time())).digest() ID_2 = md5(repr(random.random())).digest() self._ID = ArrayObject((ByteStringObject(ID_1), ByteStringObject(ID_2))) if rev == 2: U, key = _alg34(user_pwd, O, P, ID_1) else: assert rev == 3 U, key = _alg35(user_pwd, rev, keylen, O, P, ID_1, False) encrypt = DictionaryObject() encrypt[NameObject('/Filter')] = NameObject('/Standard') encrypt[NameObject('/V')] = NumberObject(V) if V == 2: encrypt[NameObject('/Length')] = NumberObject(keylen * 8) encrypt[NameObject('/R')] = NumberObject(rev) encrypt[NameObject('/O')] = ByteStringObject(O) encrypt[NameObject('/U')] = ByteStringObject(U) encrypt[NameObject('/P')] = NumberObject(P) self._encrypt = self._addObject(encrypt) self._encrypt_key = key
def testWrite(self): ftp_server_from = "stage.mozilla.org/firefox" ftp_server_to = "stage.mozilla.org/firefox" self.uvc.product = "Firefox" self.uvc.platform = "Linux_x86-gcc3" self.uvc.channel = "betatest" self.uvc.aus_server = "https://aus4.mozilla.org" self.uvc.to = "/firefox/4.0rc2.tar.bz2" self.uvc.addRelease("4.0", build_id="888", locales=("af", "de", "en-US", "ja", "zh-TW"), patch_types=("partial", "complete"), from_path="/firefox/4.0rc1.tar.bz2", ftp_server_from=ftp_server_from, ftp_server_to=ftp_server_to, mar_channel_IDs="firefox-mozilla-beta") self.uvc.addRelease("4.0b12", build_id="777", locales=["af", "en-US"], from_path="/firefox/4.0b12.tar.bz2", ftp_server_from=ftp_server_from, ftp_server_to=ftp_server_to) self.uvc.addRelease("4.0b12", build_id="777", locales=("de", "ja", "zh-TW"), ftp_server_from=ftp_server_from, ftp_server_to=ftp_server_to) self.uvc.addRelease("3.7a1", build_id="666", locales=("en-US",), ftp_server_from=ftp_server_from, ftp_server_to=ftp_server_to) self.uvc.write(self.tmpfile) self.tmpfile.close() self.assertEquals(md5(open(self.config).read()).hexdigest(), md5(open(self.tmpfilename).read()).hexdigest())
def upload(imap, src, err, time_fields, f, message_digests, mbox_hash): print >> sys.stderr, "Counting the mailbox (it could take a while for the large one)." p = Progress(len(src)) for i, msg in src.iteritems(): try: msg_hash = md5.md5(msg.as_string()).hexdigest() print md5.md5(msg.as_string()).hexdigest() p.begin(msg, f) # check if the hash combo already exists, if it is, don't reupload if mbox_hash + msg_hash in message_digests: print >> f, "message already uploaded" p.endNg("Already Uploaded", f) continue r, r2 = imap.upload(msg.get_delivery_time(time_fields), msg.as_string(), 3) if r != "OK": raise Exception(r2[0]) # FIXME: Should use custom class p.endOk(f) message_digests.add(mbox_hash + msg_hash) continue except socket.error, e: p.endNg("Socket error: " + str(e), f) except Exception, e: p.endNg(e, f)
def atest_insert_transaction(self): """ stress test, used to find out how much network latency affects performance using transactions. """ n = 100 ng = 100 ngc = 100 l = [] #print redis_transaction.commit_manually(using = 'native') #print transaction.commit_manually() with redis_transaction.commit_manually(using = 'native'): print "begin" for i in range(n): tit = md5(str(random.random())+str(i)).hexdigest() l.append(tit) Post.objects.create( title = tit, text = " ".join( [md5( str(random.random())+\ str(t)+\ str(i)).hexdigest() for t in range(20)] ) ) redis_transaction.commit() for i in range(ng): p = Post.objects.get(title = l[random.randint(0,n-1)] ) for i in range(ngc): Post.objects.filter(title__contains = l[random.randint(0,n-1)])
def get_auth_response(self, http_method, fullpath, username, nonce, realm, qop, cnonce, nc): """ Returns the server-computed digest response key. http_method: The request method, e.g. GET username: The user to be authenticated fullpath: The absolute URI to be accessed by the user nonce: A server-specified data string which should be uniquely generated each time a 401 response is made realm: A string to be displayed to users so they know which username and password to use qop: Indicates the "quality of protection" values supported by the server. The value "auth" indicates authentication. cnonce: An opaque quoted string value provided by the client and used by both client and server to avoid chosen plaintext attacks, to provide mutual authentication, and to provide some message integrity protection. nc: Hexadecimal request counter """ ha1 = self.authfunc(realm, username) ha2 = md5.md5('%s:%s' % (http_method, fullpath)).hexdigest() if qop: chk = "%s:%s:%s:%s:%s:%s" % (ha1, nonce, nc, cnonce, qop, ha2) else: chk = "%s:%s:%s" % (ha1, nonce, ha2) computed_response = md5.md5(chk).hexdigest() return computed_response
def create_disambiguated_record_for_block(block): grant_assignee_inserts = [] app_assignee_inserts = [] patentassignee_inserts = [] applicationassignee_inserts = [] grant_rawassignee_updates = [] app_rawassignee_updates = [] ra_objs = [uuid_to_object[uuid] for uuid in block] # vote on the disambiguated assignee parameters freq = defaultdict(Counter) param = {} for ra in ra_objs: for k,v in ra.summarize.items(): if not v: v = '' param[k] = v if not param.has_key('organization'): param['organization'] = '' if not param.has_key('type'): param['type'] = '' if not param.has_key('name_last'): param['name_last'] = '' if not param.has_key('name_first'): param['name_first'] = '' if not param.has_key('residence'): param['residence'] = '' if not param.has_key('nationality'): param['nationality'] = '' if param.has_key('type'): if not param['type'].isdigit(): param['type'] = '' # create persistent identifier if param["organization"]: param["id"] = md5.md5(unidecode(param["organization"])).hexdigest() elif param["name_last"]: param["id"] = md5.md5(unidecode(param["name_last"]+param["name_first"])).hexdigest() else: param["id"] = md5.md5('').hexdigest() grant_assignee_inserts.append(param) app_assignee_inserts.append(param) # inserts for patent_assignee and appliation_assignee tables patents = filter(lambda x: x, map(lambda x: getattr(x,'patent_id',None), ra_objs)) patentassignee_inserts.extend({'patent_id': x, 'assignee_id': param['id']} for x in patents) applications = filter(lambda x: x, map(lambda x: getattr(x,'application_id',None), ra_objs)) applicationassignee_inserts.extend([{'application_id': x, 'assignee_id': param['id']} for x in applications]) # update statements for rawassignee tables for ra in ra_objs: if isgrant(ra): grant_rawassignee_updates.append({'pk': ra.uuid, 'update': param['id']}) else: app_rawassignee_updates.append({'pk': ra.uuid, 'update': param['id']}) return grant_assignee_inserts, app_assignee_inserts, patentassignee_inserts, applicationassignee_inserts, grant_rawassignee_updates, app_rawassignee_updates
def _createNonce(self): return md5.md5("%d:%s" % (time.time(), self.realm)).hexdigest()
def run(verbose=1): if sys.platform[0:4] == 'java': impl = 'Jython' else: impl = 'Python' verStr = '%d.%d' % (sys.version_info[0:2]) if ACCEL: accelStr = 'with _rl_accel' else: accelStr = 'without _rl_accel' print 'Benchmark of %s %s %s' % (impl, verStr, accelStr) started = time.time() canv = canvas.Canvas('odyssey.pdf', invariant=1) canv.setPageCompression(1) drawPageFrame(canv) #do some title page stuff canv.setFont("Times-Bold", 36) canv.drawCentredString(0.5 * A4[0], 7 * inch, "Homer's Odyssey") canv.setFont("Times-Bold", 18) canv.drawCentredString(0.5 * A4[0], 5 * inch, "Translated by Samuel Burton") canv.setFont("Times-Bold", 12) tx = canv.beginText(left_margin, 3 * inch) tx.textLine( "This is a demo-cum-benchmark for PDFgen. It renders the complete text of Homer's Odyssey" ) tx.textLine( "from a text file. On my humble P266, it does 77 pages per secondwhile creating a 238 page" ) tx.textLine( "document. If it is asked to computer text metrics, measuring the width of each word as " ) tx.textLine( "one would for paragraph wrapping, it still manages 22 pages per second." ) tx.textLine("") tx.textLine("Andy Robinson, Robinson Analytics Ltd.") canv.drawText(tx) canv.showPage() #on with the text... drawPageFrame(canv) canv.setFont('Times-Roman', 12) tx = canv.beginText(left_margin, top_margin - 0.5 * inch) for fn in ('odyssey.full.txt', 'odyssey.txt'): if os.path.isfile(fn): break data = open(fn, 'r').readlines() for line in data: #this just does it the fast way... tx.textLine(line.rstrip()) #page breaking y = tx.getY() #get y coordinate if y < bottom_margin + 0.5 * inch: canv.drawText(tx) canv.showPage() drawPageFrame(canv) canv.setFont('Times-Roman', 12) tx = canv.beginText(left_margin, top_margin - 0.5 * inch) #page pg = canv.getPageNumber() if verbose and pg % 10 == 0: print 'formatted page %d' % canv.getPageNumber() if tx: canv.drawText(tx) canv.showPage() drawPageFrame(canv) if verbose: print 'about to write to disk...' canv.save() finished = time.time() elapsed = finished - started pages = canv.getPageNumber() - 1 speed = pages / elapsed fileSize = os.stat('odyssey.pdf')[6] / 1024 print '%d pages in %0.2f seconds = %0.2f pages per second, file size %d kb' % ( pages, elapsed, speed, fileSize) import md5 print 'file digest: %s' % md5.md5(open('odyssey.pdf', 'rb').read()).hexdigest()
def md5Bytes(bytes): d = md5.md5() d.update(bytes) return d.hexdigest()
def uuid3(namespace, name): """Generate a UUID from the MD5 hash of a namespace UUID and a name.""" import md5 hash = md5.md5(namespace.bytes + name).digest() return UUID(bytes=hash[:16], version=3)
def add(self, data, media_type): """ This method will attempt to store this image on distributed nodes, ensuring that each media file has at least 2 copies on the system @param data: Raw binary meda data @type data: String @param media_type: Unknown @type media_type: Unknown @return: added media @rtype: List """ if isinstance(data, xmlrpclib.Binary): data = data.data # looks strange, but that's how xmlrpc works :) id = md5(data).hexdigest() size = len(data) self.log.debug("add for %s [%d bytes] was called" % (id, size)) @stack def check_exists(result): if result[0] == 0: if not result[1]: return self._find_suitable_storage_targets(id, data, self._cfg_default_distribution_total) else: return 0 else: raise errors.APIError(result[1]) @stack def insert_txn(txn, host, id): txn.execute(""" INSERT INTO storage_assignments ( hostname, media_id ) VALUES (%s, %s) """, (host, id)) txn._connection.commit() self.log.debug("done inserting image") return 0 @stack def handle_path(result): if result[0] != 0: raise errors.APIError(result[1]) path = result[1] self.log.debug("calling _write_binary(%s.jpg)" % path) return self._write_binary("%s.jpg" % path, data) @stack def main_inserts(result): if result[0] != 0: self.log.warning("Error getting storage_targets: %s" % result[1]) raise errors.APIError(result[1]) nodes = result[1] self.log.debug("Got %s nodes back from _find_suitable()" % pformat(nodes)) dl = [] for n in nodes: self.log.debug("getting path for image %s, node %s" % (id, n)) d2 = self._make_media_path(id, n) d2.addCallback(handle_path) d2.addCallback(lambda _: dl.append(self.app.db.runInteraction(insert_txn, n, id, host=n))) dl.append(d2) d_list = DeferredList(dl, fireOnOneErrback=1) d_list.addCallback(lambda _: 0) return d_list d = self.binary_exists(id) d.addCallback(check_exists) d.addCallback(main_inserts) d.addErrback(lambda failure: (-1, failure.getErrorMessage())) return d
def test_file(self): print print "-"*60 print "MODE: Useradd" print "-"*60 for _user in self._users: self.assertTrue( self.op.user_add(_user, self._users[_user]) ) self.assertTrue( self.op.user_query("one", _user).passwd == self._users[_user] ) print print "-"*60 print "TEST: Files Put" print "-"*60 for _user in self._files: _fname = self._files[_user] _cont = self._conts[_fname] _md5 = md5(_cont).hexdigest() self.assertTrue( self.op.file_put(_user, _fname, _cont) ) self.assertTrue( self.op.file_query("one", _user, _fname).md5 == _md5 ) self.assertIsNotNone( self.op.pull_query("first", _md5) ) print print "-"*60 print "TEST: Files Get" print "-"*60 for _user in self._files: _fname = self._files[_user] _cont = self._conts[_fname] self.assertEqual( self.op.file_get(_user, _fname), _cont ) print print "-"*60 print "TEST: Files Del" print "-"*60 _user = "******" _fname = self._files[_user] _cont = self._conts[_fname] _md5 = md5(_cont).hexdigest() self.assertTrue( self.op.file_del(_user, _fname) ) self.assertIsNotNone( self.op.pull_query("first", _md5) ) _user = "******" _fname = self._files[_user] _cont = self._conts[_fname] _md5 = md5(_cont).hexdigest() self.assertTrue( self.op.file_del(_user, _fname) ) self.assertIsNone( self.op.pull_query("first", _md5) ) _user = "******" _fname = self._files[_user] _cont = self._conts[_fname] _md5 = md5(_cont).hexdigest() self.assertTrue( self.op.file_del(_user, _fname) ) self.assertIsNone( self.op.pull_query("first", _md5) )
def H(b1, b2, c): return md5("".join([hex(i).replace("0x", "") for i in [b1, b2, c]]))
def encode(self, password): return md5.md5(password + self.salt).hexdigest()
def md5hash(s): import md5 return md5.md5(s).hexdigest()
def _cache_key(self, for_=''): """Key used to identify in cache""" return md5( 'token:%s:%s:%s:%s' % (self.service_email, self.scope, self.email, for_)).hexdigest()
def calchash(code, length): # calculates and returns length character of hash md5sum = md5.md5(code) return md5sum.hexdigest()[0:length]
dtEpochTime = timeStringToDatetime(line) #add offset if (subOffset): oCurrentTime = dtCurrentTime - timedelta( days=offsetDays, minutes=offsetMinutes, seconds=offsetseconds) else: oCurrentTime = dtCurrentTime - timedelta( days=offsetDays, minutes=offsetMinutes, seconds=offsetseconds) #calculate the time difference timeDifference = oCurrentTime - dtEpochTime #convert the timedelta to an integer time difference in seconds timeDifferenceInSeconds = 86400 * timeDifference.days + timeDifference.seconds #applies daylight savings (if one time xor the other time is in dst) if (DSTApplies(dtEpochTime, dtCurrentTime)): timeDifferenceInSeconds -= 3600 #rounds the time down to the nearest divisibility by 60 usableTimeDifference = timeDifferenceInSeconds - timeDifferenceInSeconds % 60 #digest this usableTime difference twice digestedTime = md5.md5(md5.md5( str(usableTimeDifference)).hexdigest()).hexdigest() #takes the first two alphabetic characters starting from the left and the first two numeric starting from the right to get the code code = digestedTimeDifferenceToCode(digestedTime) print(code)
def _create(self): if self.open(): self.run("drop user '%s'@'localhost'" % MYSQL_USER) self.run("drop database %s" % DATABASE) self.run("create database %s" % DATABASE) self.run("create user '%s'@'localhost' IDENTIFIED BY '%s'" % (MYSQL_USER,MYSQL_PASSWORD)) self.run("grant all on "+DATABASE+".* to '%s'@'localhost'" % MYSQL_USER) self.run("flush privileges") self.run("use %s" % DATABASE) self.run(self.tb_sets._create()) self._sets_add('server','version','2.0') self._sets_add('server','server_port','10110') self._sets_add('server','dtprint_ip','localhost') self._sets_add('server','dtprint_port','10111') self._sets_add('server','backoffice_ip','IceServ') self._sets_add('server','backservice_port','10100') self._sets_add('server','bonus_port','7172') self._sets_add('server','dtprint_passwd','dtpadm') self._sets_add('server','regid','beerkem') self._sets_add('server','egais_ip','localhost') self._sets_add('server','regpassword','766766') self._sets_add('server','temperature','0') self._sets_add('server','upgrade','0') self._sets_add('server','prize_port','7174') self._sets_add('client','timeout_ping','15') self._sets_add('client','timeout_query','60') self._sets_add('client','css','default') self._sets_add('client','scale_prefix','21') self._sets_add('client','user_prefix','111') self._sets_add('client','discount_prefix','222') self._sets_add('client','bonus_prefix','777') self._sets_add('client','site','site') self._sets_add('magazine','texthead','') self._sets_add('magazine','textfoot','') self._sets_add('magazine','orgname','') self._sets_add('magazine','placename','') self._sets_add('magazine','inn','4205183793') self._sets_add('magazine','kpp','420501001') self._sets_add('magazine','logo','') self._sets_add('magazine','idplace','1') self._sets_add('magazine','nkassa','1') self._sets_add('magazine','calcost','0') self._sets_add('magazine','pricenum','0') self._sets_add('magazine','messagetype','default') self._sets_add('magazine','begin_time','06:00:00') self._sets_add('magazine','action','0') self._sets_add('magazine','sets','0') self._sets_add('magazine','nofiscal_proc','0') self._sets_add('device','dev_scanner','') self._sets_add('device','d_name','None') self._sets_add('device','d_speed','8') self._sets_add('device','d_devtype','KKM_FPRINT') self._sets_add('device','d_printsh','1') self._sets_add('device','d_autonull','1') self._sets_add('device','d_autobox','1') self._sets_add('device','d_summertm','1') self._sets_add('device','d_autocut','1') self._sets_add('device','d_ignore','0') self._sets_add('device','d_ncheck','1') self.run(self.tb_trsc_hd._create()) self.run(self.tb_trsc_ct._create()) self.run(self.tb_price._create()) self.run(self.tb_price_shk._create()) self.run(self.tb_discount._create()) self.run(self.tb_check_head._create()) self.run(self.tb_check_cont._create()) self.run(self.tb_users._create()) self.run(self.tb_types._create()) self.run(self.tb_Zet._create()) self.run(self.tb_Zet_cont._create()) self.run(self.tb_egais_places._create()) self.run(self.tb_egais_ostat._create()) self.run(self.tb_egais_docs_hd._create()) self.run(self.tb_egais_docs_ct._create()) self.run(self.tb_egais_docs_need._create()) self.run(self.tb_actions_hd._create()) self.run(self.tb_tlist._create()) self._types_add('us',10,u'Продавец') self._types_add('us',50,u'Кассир') self._types_add('us',100,u'Админ') self._user_add(['admin' ,md5("678543").hexdigest(),TYPE_USER['ADMIN']]) self._user_add(['kassir',md5("766766").hexdigest(),TYPE_USER['KASSIR']]) self._user_add(['seller',md5("111").hexdigest() ,TYPE_USER['SELLER']]) print "created database" else: print "error.not_open"
def init(web): User(login='******', password=md5('admin1234').hexdigest(), codename='admin', role='admin').save() return " Todo listo !!!"
def H(self, data): return md5.md5(data).hexdigest()
def audit(arg): II1iII1i, oO0oIIII = arg Oo0oO0oo0oO00 = "\x12\x01\x00\x2f\x00\x00\x01\x00\x00\x00\x1a\x00\x06\x01\x00\x20\x00\x01\x02\x00\x21\x00\x01\x03\x00\x22\x00\x04\x04\x00\x26\x00\x01\xff\x09\x00\x00\x00\x00\x00\x01\x00\xb8\x0d\x00\x00\x01" try: i111I = socket.socket(socket.AF_INET, socket.SOCK_STREAM) i111I.settimeout(10) i111I.connect((II1iII1i, oO0oIIII)) i111I.send(Oo0oO0oo0oO00) II1Ii1iI1i = i111I.recv(1024) i111I.close() for iiI1iIiI in range(len(II1Ii1iI1i)): if II1Ii1iI1i[iiI1iIiI] == "\xff": break OOo = int(binascii.b2a_hex(II1Ii1iI1i[iiI1iIiI + 1]), 16) Ii1IIii11 = int(binascii.b2a_hex(II1Ii1iI1i[iiI1iIiI + 2]), 16) Oooo0000 = int(binascii.b2a_hex(II1Ii1iI1i[iiI1iIiI + 3]), 16) * 256 + int( binascii.b2a_hex(II1Ii1iI1i[iiI1iIiI + 4]), 16) if Ii1IIii11 < 10: i11 = "%d.%02d.%d" % (OOo, Ii1IIii11, Oooo0000) else: i11 = "%d.%d.%d" % (OOo, Ii1IIii11, Oooo0000) hash = md5.md5(i11).hexdigest() I11 = {"8d060b11b24c3bfd26e273af79c92736": "Microsoft SQL Server 2012 SP1 (CU1)", "1e85aae0472507861d9d1ad5bc3eb47d": "Microsoft SQL Server 2012 SP1", "360b72f9ca12d7e9f67fb645af858fc5": "Microsoft SQL Server 2012 SP1 CTP4", "1f780b0e5fe4ce33dd2b6cbad946cb45": "Microsoft SQL Server 2012 SP1 CTP3", "8a0897d1f592b12a37db0643fc1932c6": "Microsoft SQL Server 2012 SP0 (CU4)", "ad3643e933c8c2417a413b9566af19ac": "Microsoft SQL Server 2012 SP0 (MS12-070)", "e095f75fc751dfe06111d6a6682f6843": "Microsoft SQL Server 2012 SP0 (CU3)", "b0ae2cff7220c039a75d7beaad18226c": "Microsoft SQL Server 2012 SP0 (CU2)", "6414925bf11f886351c68d08df6e1081": "Microsoft SQL Server 2012 SP0 (CU1)", "358d235773fdb35f23f5d412f1e3ebba": "Microsoft SQL Server 2012 SP0 (MS12-070)", "a2fd5707de641bc98b391ba1c5b677f7": "Microsoft SQL Server 2012 SP0 (KB2685308)", "23101c72ea8af9e228f2efab2736725e": "Microsoft SQL Server 2012 RTM", "4311e96155da9eacb8c09ce7633d1404": "Microsoft SQL Server 2012 RC1", "06b1ab494e5a80b80f828ae9b52cb93f": "Microsoft SQL Server 2012 RC0", "6cbcb0157951be0e75414d2e1787d69c": "Microsoft SQL Server 2012 (Codename Denali) CTP3", "63012c2c0f8952b0dc463aae94e2abca": "Microsoft SQL Server 2012 (Codename Denali) CTP1", "64f5b2db697eb49204d5a2eb19f16e00": "Microsoft SQL Server 2008 R2 SP1 (CU4)", "f065cc37d0696671dc515306f9148614": "Microsoft SQL Server 2008 R2 SP1 (CU3)", "690484ee6341b4cb52a7301112a3ab29": "Microsoft SQL Server 2008 R2 SP1 (KB2606883)", "17cc65f2ee9feed0af1f416301654d4b": "Microsoft SQL Server 2008 R2 SP1 (CU2)", "4632bd58825d7f4388450c7f659d5b9f": "Microsoft SQL Server 2008 R2 SP1 (CU1)", "963b608a4c7162f7bc5a3c28cb96aec2": "Microsoft SQL Server 2008 R2 SP1", "5e8010f1265d0097c2c4af37364d6bd2": "Microsoft SQL Server 2008 R2 (CU10)", "15b33728e6c21d283e59f8572b9b3636": "Microsoft SQL Server 2008 R2 (CU9)", "8f30cf502441b84ebf051d2b42164cc5": "Microsoft SQL Server 2008 R2 (KB2574699)", "38ea6ea8709c555ba60e00a6b1247b44": "Microsoft SQL Server 2008 R2 (CU8)", "33024d578dc00a6b7f50e1235f116dca": "Microsoft SQL Server 2008 R2 QFE (MS11-049)", "0a0d1d2770251c6c0cdf574b0cd364fd": "Microsoft SQL Server 2008 R2 (CU7)", "1a4c0860e8a66cc2ef413784d4d6794a": "Microsoft SQL Server 2008 R2 (KB2520808)", "48f99e6be573eb1ebb3031f919f25d4c": "Microsoft SQL Server 2008 R2 (CU6)", "848348e42584b1c6898c194ed1860943": "Microsoft SQL Server 2008 R2 (CU5)", "ca755ee5bbd552b30d3a7397e175d9fe": "Microsoft SQL Server 2008 R2 (CU4)", "704e4ddc791359e3910060e049b4e83f": "Microsoft SQL Server 2008 R2 (CU3)", "b9aaacbf927bd4397f2aa1daf7aa03a0": "Microsoft SQL Server 2008 R2 (CU2)", "74546c9676d47dcfddf88656da2ab112": "Microsoft SQL Server 2008 R2 (CU1)", "f1b448887fa7234e82c3ecbfbb2bae5c": "Microsoft SQL Server 2008 R2 GDR (MS11-049)", "a49c50d890d04e856398de3408e7d1a6": "Microsoft SQL Server 2008 R2 RTM", "0ee4471cd15b028dd78db7c81189dab2": "Microsoft SQL Server 2008 R2 November CTP Release", "3c57c657e7f3e8722e8f591d830b7c56": "Microsoft SQL Server 2008 R2 August CTP Release", "9ae4012b68e50ae961e1d247766d2ef6": "Microsoft SQL Server 2008 SP3 (CU2)", "5734dfe6d6012930af14589e9f0540ef": "Microsoft SQL Server 2008 SP3 (CU1)", "52f132a12b67f5ed824f2f572fe6e4db": "Microsoft SQL Server 2008 SP3", "5bdf46feebdb5af03712c747344c7b63": "Microsoft SQL Server 2008 SP3 CTP", "4ff03bc78eeed7e3d51e20af52293d66": "Microsoft SQL Server 2008 SP2 (CU7)", "d988eee7b0efe06eb3ff88d020646048": "Microsoft SQL Server 2008 SP2 (CU6)", "f1be19ad8f86b319709a3b307badeacb": "Microsoft SQL Server 2008 SP2 (CU5)", "a1bfe250e8ee1c1ed78861a1e33918b6": "Microsoft SQL Server 2008 SP2 (CU4)", "04e03afb7f4b1e6197e756fd993cd74b": "Microsoft SQL Server 2008 SP2 (CU3)", "caee40f76bc139ca1c759ebacdd7f889": "Microsoft SQL Server 2008 SP2 (CU2)", "828eb15c52e0c058d2c6d6d21d5f5d14": "Microsoft SQL Server 2008 SP2 (CU1)", "18acf41d55d21a0be65784425429316e": "Microsoft SQL Server 2008 SP2", "cb3d82b09dbb307296fc563c44ab444e": "Microsoft SQL Server 2008 SP1 (CU16)", "cfece6d95c446d11ef011ab07e8c6509": "Microsoft SQL Server 2008 SP1 (CU15)", "57722a5109f3055406d1a27c2d0caa9e": "Microsoft SQL Server 2008 SP1 (CU14)", "332cba967dccccf2594c7820cd8cafcd": "Microsoft SQL Server 2008 SP1 (CU13)", "27da5dd190501f0b2a0f6d21873b88b5": "Microsoft SQL Server 2008 SP1 (CU12)", "fff730ed78542e1bb27cbc32eaccb8de": "Microsoft SQL Server 2008 SP1 (CU11)", "627c84cf18f97ead90510e6cb208ea22": "Microsoft SQL Server 2008 SP1 (CU10)", "ed23cc958659fdee5cf25892808ea26c": "Microsoft SQL Server 2008 SP1 (CU9)", "cf46591bcecc57c734a74e35c1c1028a": "Microsoft SQL Server 2008 SP1 (CU8)", "e149e263c4bbe6532cf9984ed6de9865": "Microsoft SQL Server 2008 SP1 (CU7)", "505a2aa33afa94df84e09eccb4a535fd": "Microsoft SQL Server 2008 SP1 (CU6)", "e567f75258707297eaa457cca8633864": "Microsoft SQL Server 2008 SP1 (CU5)", "ba59ea730e20860e279aa5dbe8b3ec75": "Microsoft SQL Server 2008 SP1 (CU4)", "5dbd3c6a977c3fa2fa9c22ae70170ee5": "Microsoft SQL Server 2008 SP1 (CU3)", "3b43f1466177a085f706f71803ac94d1": "Microsoft SQL Server 2008 SP1 (CU2)", "8b9a3956c6381cd57c0656303ddc42d2": "Microsoft SQL Server 2008 SP1+Q970507", "1677d463a4fea05ed658f41f81a55a9c": "Microsoft SQL Server 2008 SP1 (CU1)", "d5c2694a118124bf29e3cc191ae91d08": "Microsoft SQL Server 2008 SP1", "337187ef8e5d93d235d1d01a797e33df": "Microsoft SQL Server 2008 SP0 (CU6)", "20f7d10f4e9fecd21a627e7de887a9ec": "Microsoft SQL Server 2008 SP0 (CU4)", "23186630cf4e890f34cc5d933fcce19b": "Microsoft SQL Server 2008 SP0 (CU3)", "e98fda7ab94c7d3568701599451212e0": "Microsoft SQL Server 2008 SP0+Q958186", "022e0d46903f5fab7a524d3f7b229775": "Microsoft SQL Server 2008 SP0+Q958611", "02af41567dde84ca70ff66edb1d8f8ad": "Microsoft SQL Server 2008 SP0+Q956718", "5cd5ec07cfd55ca330ad279be169c72b": "Microsoft SQL Server 2008 RTM", "c4c318405fd33930ff823fb0eb442aff": "Microsoft SQL Server 2008 February CTP Release", "6d93932497bbe70ef0934a7689d83086": "Microsoft SQL Server 2008 July CTP Release", "120c439d8686e3823f60bf13ff1618b1": "Microsoft SQL Server 2008 June CTP Release", "8989604a4d0d0cd2929f4688014c70e4": "Microsoft SQL Server 2005 SP3+Q972511", "84c98592d4300f7509d7e54f51a8981a": "Microsoft SQL Server 2005 SP3+Q970279", "ad5ff968c1b9dda11aae5c78e8af51df": "Microsoft SQL Server 2005 SP3+Q971409", "af174f77f96902a0ff3f8d26b37dfba0": "Microsoft SQL Server 2005 SP3+Q967909", "ad6cd4d37ca911cea517636eeb88edd3": "Microsoft SQL Server 2005 SP3+Q967101", "86b20a798d903c2cfaa1039877f77a43": "Microsoft SQL Server 2005 SP3+Q961930", "8efe34797e646384bb36f80c6d8fb907": "Microsoft SQL Server 2005 SP3+Q959195", "109c5a102e7e11e15882fd545eae502b": "Microsoft SQL Server 2005 SP3+Q970892 (MS09-062)", "80ab3f7e6e2fc4eda42bfc8c37b8ce11": "Microsoft SQL Server 2005 SP3+Q955706", "3e8cd13548ce3e36bb1b884b6dd1fe27": "Microsoft SQL Server 2005 SP2+Q970278", "7494f59279e6d897e3ff53416ccf7084": "Microsoft SQL Server 2005 SP2+Q948567/961648", "5cb4a5543e78d6b9fac189efb7671229": "Microsoft SQL Server 2005 SP2+Q967908", "5b25efc579cb28b0ec3d533f9f630749": "Microsoft SQL Server 2005 SP2+Q969142", "6fc1d52fd82041321844b41664436135": "Microsoft SQL Server 2005 SP2+Q962970", "a2c0e8587e24a2452daab63c4251c43e": "Microsoft SQL Server 2005 SP2+Q960090", "a745aa5bf2cfd7f7e8b18033819ef96d": "Microsoft SQL Server 2005 SP2+Q962209", "d5f0143887cd5253b66c631b6738027d": "Microsoft SQL Server 2005 SP2+Q961479/961648", "513966802cc43d511fb8fd20d2122ed1": "Microsoft SQL Server 2005 SP2+Q958735", "e7c4c038ab64df5622deb1c779fa605e": "Microsoft SQL Server 2005 SP2+Q959132", "2ea960bdbf5cb015662f4ea9ad07424b": "Microsoft SQL Server 2005 SP2+Q956854", "d63d79f9660e38595de921ce02e43000": "Microsoft SQL Server 2005 SP2+Q956889", "b9bb259b4b5cdb812e5bd990254d51b8": "Microsoft SQL Server 2005 SP2+Q937137", "566cff48f7f43c171fa8c09b9846c65d": "Microsoft SQL Server 2005 SP2+Q953752/953607", "6f63aeb7eee837fab68ff6aad133a889": "Microsoft SQL Server 2005 SP2+Q955754", "a5f6a8e939d8a1610d0390c146ebdbf3": "Microsoft SQL Server 2005 SP2+Q954950", "295fb038c107543ea51341b46535cc94": "Microsoft SQL Server 2005 SP2+Q954669/954831", "4efcac093a5e7b8b63f696723deb40d8": "Microsoft SQL Server 2005 SP2+Q951217", "e9133fe4eb1ddb3ccbab3d88934e6ba1": "Microsoft SQL Server 2005 SP2+Q954054", "6e3f86fd8c3e4eb8979c7e0770f5afba": "Microsoft SQL Server 2005 SP2+Q952330", "ebe2d577493b9fb159d4192bf394beb8": "Microsoft SQL Server 2005 SP2+Q951190", "01b9bb77608afc92e6172514cb145070": "Microsoft SQL Server 2005 SP2+Q951204", "ef149b3b3ad5472c2df3b4edfa063609": "Microsoft SQL Server 2005 SP2+Q949095", "24f91be8935e2d3e15064075cbb42dba": "Microsoft SQL Server 2005 SP2+Q950189", "c3618ebe137c5203c4174224f27b3408": "Microsoft SQL Server 2005 SP2+Q941203/948108 (QFE)", "fc441e4682a7d47f569da3f9e03f31be": "Microsoft SQL Server 2005 SP2+Q949959", "895f7cfd66b9100c9418ca518e29b6ec": "Microsoft SQL Server 2005 SP2+Q949687/949595", "b1d333aa8fb5ee04767c3568e3807cf1": "Microsoft SQL Server 2005 SP2+Q949199", "9adf9cdd238f9b9e0d3a4018e8f2a81e": "Microsoft SQL Server 2005 SP2+Q946608", "fe0bcddcc5e1a4a49124f919af9fafed": "Microsoft SQL Server 2005 SP2+Q947463", "383403ee163110a2a9c9b94fe124a474": "Microsoft SQL Server 2005 SP2+Q945640/945641/947196/947197", "be68eb4fd1537b3388de0ad81cf15d6d": "Microsoft SQL Server 2005 SP2+Q942908/945442/945443/945916/944358", "2fbdce27c31680d90ee92cc063d4cf9f": "Microsoft SQL Server 2005 SP2+Q941450", "74f157271f429ecaca8c5f198a965f51": "Microsoft SQL Server 2005 SP2 (SQLHF Bug #50002118)", "6bf3f5c5de51d6594a2fd98b896ffa1c": "Microsoft SQL Server 2005 SP2+Q944902", "0e812541afe474254339c3af96446da9": "Microsoft SQL Server 2005 SP2+Q944677", "4fdbd9243dcf244c8d664c67389c58c6": "Microsoft SQL Server 2005 SP2 (SQLHF Bug #50001708/50001999)", "33b41efda1c6a38518deb13ff6d4de28": "Microsoft SQL Server 2005 SP2 (SQLHF Bug #50001951/50001993/50001997/50001998/50002000)", "24825e627c9e8cc4d34b233773be226d": "Microsoft SQL Server 2005 SP2+Q941450", "41d0513b6b0feca4f1469a25de2808d8": "Microsoft SQL Server 2005 SP2 (SQLHF Bug #50001812)", "13043a580d36cc7ee27cf70f62cfb13e": "Microsoft SQL Server 2005 SP2+Q940933", "7f3fdebdaf5faa33c716652a13f3bd61": "Microsoft SQL Server 2005 SP2+Q939562", "b5551f8ac21788c7baeff9f4f6e6b183": "Microsoft SQL Server 2005 SP2+Q940128", "ca887907d5067455638715dc2da49e37": "Microsoft SQL Server 2005 SP2+Q939942", "6aeed6620db64b9f2c86b087ae18a344": "Microsoft SQL Server 2005 SP2+Q938243", "2f49464f9532d97d0f9e21e176246bc3": "Microsoft SQL Server 2005 SP2 (SQLHF Bug #50001193/5001352)", "9dd676f1588aaafe21430f56220a4a3f": "Microsoft SQL Server 2005 SP2+Q939563/939285", "43280890cbcb7b7e921f8a4cc8e311d6": "Microsoft SQL Server 2005 SP2+Q936305/938825", "cdb60569c6d262f3d91d96d68d9791b3": "Microsoft SQL Server 2005 SP2+Q937745", "96a1b4fba14cc44b6def723cd2a64baa": "Microsoft SQL Server 2005 SP2+Q937041/937033", "b63bd6c22eda8b00fa36b3fcc1fcbb8a": "Microsoft SQL Server 2005 SP2+Q936185/934734", "038c761623b443d27f46524c3a7f1926": "Microsoft SQL Server 2005 SP2+Q932610/935360/935922", "6cc017b596fe7eb219e0a860932d1eb4": "Microsoft SQL Server 2005 SP2+Q935356/933724", "7c0738011de825e89842872114564773": "Microsoft SQL Server 2005 SP2+Q934459", "27901da618d1abdc696118687df37aa2": "Microsoft SQL Server 2005 SP2+Q934226", "34b018f22c83fee6530aee0205430e67": "Microsoft SQL Server 2005 SP2+Q933549 /933766/933808/933724/932115/933499", "bdb6d99287fe9d68af70c33f56a6ff98": "Microsoft SQL Server 2005 SP2+Q934106/934109/934188", "5de0d3cfa6811b4f83551e1d370da09b": "Microsoft SQL Server 2005 SP2+Q933564", "03386e2326ebdb050aee82ec26d54832": "Microsoft SQL Server 2005 SP2+Q933097", "d60509949815f01c070b492929af11a3": "Microsoft SQL Server 2005 SP2+Q960089", "3ba7ee59a54388d34bf7f1f3bacaf1c4": "Microsoft SQL Server 2005 SP2+Q954606", "2fe641ba73872fef03e26acecfe0f5ee": "Microsoft SQL Server 2005 SP2+Q941203/948109", "0f93d879e086a0a2878db1b976fdc8a3": "Microsoft SQL Server 2005 SP2+Q934458", "63ad294e19c72cddbcfc59c426d44a1b": "Microsoft SQL Server 2005 SP2+Q933508", "b238f1b90b2f361cc53597b2dc638f74": "Microsoft SQL Server 2005 SP2+Q933508", "bb6d39e75c3275a4899dc3b9f2306aa6": "Microsoft SQL Server 2005 SP2 RTM Fixed", "749c9b2c2ee2396633262833c738c6c9": "Microsoft SQL Server 2005 SP2 December CTP Release", "682c4ed44ed213d75cade8d2bf82a1f6": "Microsoft SQL Server 2005 SP2 November CTP Release", "ed85fc173e3d8a36029c6880f9a5b7e2": "Microsoft SQL Server 2005 SP1+Q929376", "dc2761ffee92eba9f2eb26b1b2d99602": "Microsoft SQL Server 2005 SP1+Q948344", "211f012b66a03d6691cd0bff2f9e1d22": "Microsoft SQL Server 2005 SP1+Q933573", "5acf25b8a69ee9e3d8475015d3e85c64": "Microsoft SQL Server 2005 SP1+Q944968", "807f4ec4c9b9aa171c75a4accaabab31": "Microsoft SQL Server 2005 SP1+Q943389/943388", "b66a849fc84ed4f1dc24b3d060a5f8ed": "Microsoft SQL Server 2005 SP1+Q940961", "12b557c20f220d053b5d80f8a73e990c": "Microsoft SQL Server 2005 SP1+Q940719", "7d0cbe9133b31242f957be4bf7dcd20c": "Microsoft SQL Server 2005 SP1+Q940287/940286", "a93a2b07da49575c3d862519cbd10cfd": "Microsoft SQL Server 2005 SP1+Q937343", "30c8011092ff16fdf47f1418b0332f25": "Microsoft SQL Server 2005 SP1+Q933499/937545", "d49e9741de96eee1163140d95faa9684": "Microsoft SQL Server 2005 SP1+Q937277", "ba83fd160b3ba37cb6d9cfbf3fd90137": "Microsoft SQL Server 2005 SP1+Q934812", "edbc9b3bd8f240a9550bcedc6a343527": "Microsoft SQL Server 2005 SP1+Q936179", "a1f66f07a0590e465eb46d66b497ec6e": "Microsoft SQL Server 2005 SP1+Q935446", "21fe0b74defbcc5859fa8a9ed6b116d3": "Microsoft SQL Server 2005 SP1+Q934066/933265", "c283e1efefbb37a2360136f2b2a85920": "Microsoft SQL Server 2005 SP1+Q933762/934065/934065", "040fe51ef37d4f3f1f5f6b38a24229bf": "Microsoft SQL Server 2005 SP1+Q932990/933519", "7f9100bbbae191ba1662e63e440d35de": "Microsoft SQL Server 2005 SP1+Q932393", "04fe531d8c04fab3b5922991e71342fb": "Microsoft SQL Server 2005 SP1+Q931593", "cb23cc0d927f0fea4b42aa14027aae00": "Microsoft SQL Server 2005 SP1+Q931329/932115", "34f054012b0f353a2c44b45116c69696": "Microsoft SQL Server 2005 SP1+Q931843/931843", "c34dfe7fb594940baca44f8bca53caf1": "Microsoft SQL Server 2005 SP1+Q931821", "d8845210a844aa79e926385781d386af": "Microsoft SQL Server 2005 SP1+Q931666", "d14287b31c398b82d5d8e97fc995b8cf": "Microsoft SQL Server 2005 SP1+Q929240/930505/930775", "a40ea79fbc28722b859a25ff5ced82d5": "Microsoft SQL Server 2005 SP1+Q930283/930284", "5d753acdf3f92a2cb635d710cebf90aa": "Microsoft SQL Server 2005 SP1+Q929278", "89e025c7db6feefec8118e9fe46ae7f2": "Microsoft SQL Server 2005 SP1+Q929179/929404", "d4e4e6f22a9f816b47fca8ca5498e7ad": "Microsoft SQL Server 2005 SP1+Q928394/928372/928789", "300923586b4c0e3f024c25bdc8cb0403": "Microsoft SQL Server 2005 SP1+Q928539/928083/928537", "c7004c3f9355cbf84d9284831d244838": "Microsoft SQL Server 2005 SP1+Q927643", "57cbdeaa93d18671bf0b7fb2f30c2521": "Microsoft SQL Server 2005 SP1+Q927289", "4d8a54483104170ece3e0ad5466673c9": "Microsoft SQL Server 2005 SP1+Q926773/926611/924808/925277/926612/924807/924686", "1693d799b78f143171a16c241cad2706": "Microsoft SQL Server 2005 SP1+Q926285/926335/926024", "ad76d69daa71d858295463d43b8969d2": "Microsoft SQL Server 2005 SP1+Q926240", "5dbd4ab0278aadadafa65d6e03e04132": "Microsoft SQL Server 2005 SP1+Q925744", "69f6f4434c1cdd351d3f0787da729b53": "Microsoft SQL Server 2005 SP1+Q924954/925335", "c8a854536e5278340ff54ff15d8f762f": "Microsoft SQL Server 2005 SP1+Q925135", "f29b61669cf292583822ba2d5a99022c": "Microsoft SQL Server 2005 SP1+Q925227", "d32d3c8eabbdfd159abb34f657879d27": "Microsoft SQL Server 2005 SP1+Q925153", "9df776e7b08002f18f32c068250c575d": "Microsoft SQL Server 2005 SP1+Q923849", "19a8b28ba93c452de5ee6a444a5fb4a3": "Microsoft SQL Server 2005 SP1+Q929404/924291", "c45f25ddf2df7ff53105066742c4f158": "Microsoft SQL Server 2005 SP1+Q923624/923605", "90b2d6102b549d19ded6262684ba9d4b": "Microsoft SQL Server 2005 SP1+Q923296/922594", "d2a7046acb5933b692c1ef7823226225": "Microsoft SQL Server 2005 SP1+Q922578/922438/921536/922579/920794", "7c0027068bab5143dc7ecdd9c68505b4": "Microsoft SQL Server 2005 SP1+Q922063", "ec1890c4b20c4380c0e5d995d4a3eb61": "Microsoft SQL Server 2005 SP1+Q920974/921295", "58dd5672b8acba1b9f3dee56bfbb5c5e": "Microsoft SQL Server 2005 SP1+Q919636/918832/919775", "debc00ed3ccb4b6d22e4f36e4a2e247e": "Microsoft SQL Server 2005 SP1+Q919611", "c42f33ad78d89734f01988e8c3485b37": "Microsoft SQL Server 2005 SP1+Q919224", "ff46f90098657ef9462183c65e985f9e": "Microsoft SQL Server 2005 SP1+.NET Patch", "45cadfbc320ea8d059398b0d7bcf3940": "Microsoft SQL Server 2005 SP1 RTM", "5ed2c8ff2453361fc6813c115a37d532": "Microsoft SQL Server 2005 SP1 CTP", "f06e25cac6907075a4c349f0d2cc0507": "Microsoft SQL Server 2005 SP1 Beta", "b2a538474eb68862549b46f7f1b08829": "Microsoft SQL Server 2005 SP0+Q932556", "af5835d5b31aa1e940a6f6e42c74dd18": "Microsoft SQL Server 2005 SP0+Q926493", "55368a3eedc0e021dd46434433595ae5": "Microsoft SQL Server 2005 SP0+Q926292", "6df6307d137f71525f22d59492c6a696": "Microsoft SQL Server 2005 SP0+Q922804", "1d87b14183c6548da00c9a87494d5f40": "Microsoft SQL Server 2005 SP0+Q917887/921106", "62b944471248dd6881e54cc629354b9b": "Microsoft SQL Server 2005 SP0+Q918276", "dbab590252c6ae350a9bc20aa7ff8027": "Microsoft SQL Server 2005 SP0+Q917905/919193", "7fb3285c5aa23410f293e9540959fc5f": "Microsoft SQL Server 2005 SP0+Q917888/917971", "0ed0f8dac184279d360c451498ba6140": "Microsoft SQL Server 2005 SP0+Q917738", "8953c247aa439bd924d1b5cf1596a95f": "Microsoft SQL Server 2005 SP0+Q917824", "a0ed6b35ccc3277306cdc2b320fc17de": "Microsoft SQL Server 2005 SP0+Q917016", "34c9c15d5565a8edf5d9b9126e5c7997": "Microsoft SQL Server 2005 SP0+Q916706", "339d41f65fb7dc86aaf8ec521c06cad9": "Microsoft SQL Server 2005 SP0+Q916086", "d0b8b5ba5d4f73b7a0c3b97d022f9cea": "Microsoft SQL Server 2005 SP0+Q916046", "0513ee8564d88342e21334c6e6baac86": "Microsoft SQL Server 2005 SP0+Q915918", "83f673bceda45b50690e9361ab5079c7": "Microsoft SQL Server 2005 SP0+Q915112/915306/915307/915308", "365e5867e44bbbfd75455dcb27899253": "Microsoft SQL Server 2005 SP0+Q913494", "80b4e818dc3834cccf636a5d1acba15c": "Microsoft SQL Server 2005 SP0+Q912472/913371/913941", "7a95f97cabca3d1a79be780c722eba5b": "Microsoft SQL Server 2005 SP0+Q912471", "2dfe55643687817480801ba2df89af61": "Microsoft SQL Server 2005 SP0+Q911662", "5c1ae183089e8551e524d6aa61e15786": "Microsoft SQL Server 2005 SP0+Q915793", "ab13210d3c275f1f5f51b58917880e83": "Microsoft SQL Server 2005 SP0+Q910416", "180209d4f976e6256afd3d11eab21881": "Microsoft SQL Server 2005 SP0+Q932557", "74dd03f53875926337e03308b6d9c1b4": "Microsoft SQL Server 2005 RTM", "a55053abe8197bbc7d4515896ab328d2": "Microsoft SQL Server 2005 September CTP Release", "e138673dbba7a5c8f81479de6d72ff2c": "Microsoft SQL Server 2005 June CTP Release", "08736341e8a0d8c567b724edf2b1af3b": "Microsoft SQL Server 2005 April CTP Release", "32054b12be1c6df74821d8ff07492a11": "Microsoft SQL Server 2005 March CTP Release", "df6f8bce0469ad67035db826792d516b": "Microsoft SQL Server 2005 December CTP Release", "04dba07526224ebc5ca070d9db41e9f6": "Microsoft SQL Server 2005 October CTP Release", "f6956a2c5d910d9b5ecc6ef8c69fe1a1": "Microsoft SQL Server 2005 Internal Build (?)", "cf3cfee8fe1bf593f8a346c4ddb1ea5e": "Microsoft SQL Server 2005 Beta 2", "bf1cc6be113f870f1bff996e0df7ca03": "Microsoft SQL Server 2005 Internal Build (?)", "3b6d25cb3020824f0ae4b6a98b8ef008": "Microsoft SQL Server 2005 Internal Build (?)", "b4ced29e8ee2510ad0d93264d23fba75": "Microsoft SQL Server 2005 Express Edition Tech Preview", "148ab7ef6fe8065734b39cadcd00c542": "Microsoft SQL Server 2005 Internet Build (IDW4)", "7cb7b1d5499d49eb00e1d59858c10ff7": "Microsoft SQL Server 2005 Internet Build (IDW3)", "e1f79ede783ae7f63203902743d5054a": "Microsoft SQL Server 2005 Internet Build (IDW2)", "441e4bdd7654296e6552c00cdcd430f4": "Microsoft SQL Server 2005 Internet Build (IDW)", "f994815c3f2694e5f85286c6b03cd06a": "Microsoft SQL Server 2005 Internal Build (?)", "c4931953a77436e4779508204d572744": "Microsoft SQL Server 2005 Beta 1", "9c06d6ab148792f83c1f940a5c481db3": "Microsoft SQL Server 2000 SP4+Q971524", "d9940f11b8f9ad794f85a02524838d99": "Microsoft SQL Server 2000 SP4+Q941203/948111", "2af392701a43433e8d75938f012b5508": "Microsoft SQL Server 2000 SP4+Q946584", "1bc44ef5c46df35fa2b373849a33e52d": "Microsoft SQL Server 2000 SP4+Q944985", "96e46b8a7aa0714ed7eca709e6daf2d1": "Microsoft SQL Server 2000 SP4+Q939317", "e8aa875e5ede62bb7c26c3627a5335b8": "Microsoft SQL Server 2000 SP4+Q936232", "20cb55f5b6f96d033931e059ed096ef7": "Microsoft SQL Server 2000 SP4+Q935950", "d0bd8d93ed7fae6832d820222124d0ad": "Microsoft SQL Server 2000 SP4+Q935465", "9e225c8ad386a35aa2f8168174f0e405": "Microsoft SQL Server 2000 SP4+Q933573", "7da482c778197df0591b9c7ba271ccde": "Microsoft SQL Server 2000 SP4+Q934203", "e88dd049edeec1334d232a8a7f172f8e": "Microsoft SQL Server 2000 SP4+Q929131/932686/932674", "83d55f654bd80dd4334015909889dfb9": "Microsoft SQL Server 2000 SP4", "b1430d2806fa07d13b62d6c3a1c8885c": "Microsoft SQL Server 2000 SP4+Q899761/935897", "7b8bea9fcab8f21a0c1846a0be250399": "Microsoft SQL Server 2000 SP4", "aa66173e2f4beb22d79506411667eaac": "Microsoft SQL Server 2000 SP4+Q931932", "695cfb74f1ce88f35cc03f312143a27a": "Microsoft SQL Server 2000 SP4+Q929440/929131", "3172ab0dbc42c026d3008dcd4a7d606f": "Microsoft SQL Server 2000 SP4+Q928568", "8ff18432ba933b57c748fc288ee2fa25": "Microsoft SQL Server 2000 SP4+Q928079", "3b6fe08b6b8ac00daa7d6e91f3ee6e15": "Microsoft SQL Server 2000 SP4+Q927186", "5bb8d5ab1b18fed0b42125afd249f924": "Microsoft SQL Server 2000 SP4+Q925684/925732", "2fff9bf920d5350df656d5c13cac86b3": "Microsoft SQL Server 2000 SP4+Q925678/925419", "8725bd02682859df7228e9f9340dec46": "Microsoft SQL Server 2000 SP4", "3c6f2b9d3d0dc6ef55f4c63357a119d6": "Microsoft SQL Server 2000 SP4+Q925297", "976a22e431b51b6e4f79de7fa07ab97a": "Microsoft SQL Server 2000 SP4+Q924664", "cd5ec1db116c6e1d95d97897e02bc743": "Microsoft SQL Server 2000 SP4", "1624d981efa13866b9e71b8061bec6a9": "Microsoft SQL Server 2000 SP4+Q924662/923563/923327/923796", "13898528d4683cdd9591875ae819da26": "Microsoft SQL Server 2000 SP4+Q923797", "0179aff63a9489cdd9ef841d3b5494fd": "Microsoft SQL Server 2000 SP4+Q923344", "1641d7cab5075a0f35d66f7d17bc4343": "Microsoft SQL Server 2000 SP4", "f3125c4259b0ad558770fc38eca63f30": "Microsoft SQL Server 2000 SP4", "4c73b851a37594d2d3ff3489a5b42f54": "Microsoft SQL Server 2000 SP4+Q920930", "7d08187e20ce5bec8412b16cea874d25": "Microsoft SQL Server 2000 SP4", "06b489f9c178a289fc7baa1a267eecda": "Microsoft SQL Server 2000 SP4+Q919221", "aed8eb308dc6f48327f4b2543ab2f553": "Microsoft SQL Server 2000 SP4+Q919133/919068/919399", "1e57b73c07e57164cf246613016b31f5": "Microsoft SQL Server 2000 SP4+Q919165", "949087541e3afe30a92fb52c6edc91a7": "Microsoft SQL Server 2000 SP4+Q917972/917565", "28c236770f38c2b2c7b3269897641956": "Microsoft SQL Server 2000 SP4+Q917606", "54a9e766f863c3df7f3dc1986fd69d55": "Microsoft SQL Server 2000 SP4+Q916698/916950", "e5d20eb6aec23b0f5b8794a6fb886a60": "Microsoft SQL Server 2000 SP4", "cb2a4274338bc1669bf4b2dd720e4f55": "Microsoft SQL Server 2000 SP4+Q916652/913438", "12e23766a9903757393d51121ca785be": "Microsoft SQL Server 2000 SP4+916287/914384/898709/915065/915340", "29cfc25a7826f5ee8e6b37e1faf70c1d": "Microsoft SQL Server 2000 SP4", "6e336bf9234a2f8ffb26683a19531933": "Microsoft SQL Server 2000 SP4", "563bafc6e4f5bf11f8ed460f6bacbe09": "Microsoft SQL Server 2000 SP4", "817615392c8c7cbb282bcf96763ebb89": "Microsoft SQL Server 2000 SP4+Q913684 (64-bit)", "45e6827a8d55ef2af86142f4a9452c71": "Microsoft SQL Server 2000 SP4", "6dd851d35505d3d626cd899ddeeceeef": "Microsoft SQL Server 2000 SP4+Q911678/922579", "3d9c7fc1f8153fd2f030ea271bb2ef4d": "Microsoft SQL Server 2000 SP4+Q910707", "2c6de8d59f442d1d239b8392e447e3dc": "Microsoft SQL Server 2000 SP4+Q909369", "6b0c980cbb6357414776dcedd4b9c12a": "Microsoft SQL Server 2000 SP4+Q907813", "792bdb660fa9878f7ac16041d0b88cea": "Microsoft SQL Server 2000 SP4+Q921293", "6e8153945216c7c00d3d9a55cb79499f": "Microsoft SQL Server 2000 SP4+Q909734", "d76843017acb57ae1ac660c548fcee24": "Microsoft SQL Server 2000 SP4", "8246465981546932efcae109be0d5fbe": "Microsoft SQL Server 2000 SP4+Q904660", "c72939b430f41809dbd4b637dea0ef76": "Microsoft SQL Server 2000 SP4+Q907250", "f7997d85c617e8b6b58e8c7b62d12571": "Microsoft SQL Server 2000 SP4+Q906790", "ea50ed28e41bb538de852364c8f63c52": "Microsoft SQL Server 2000 SP4+Q903742/904244", "b8c4252b5268a455ea5be4934796d2c2": "Microsoft SQL Server 2000 SP4+Q899430/899431/900390/900404/901212/902150/902955", "4873c8a54dfed6850570d1450adf14e1": "Microsoft SQL Server 2000 SP4+Q899410", "97871b3e6a08772c8d91d1fc33363804": "Microsoft SQL Server 2000 SP4", "f28440eb00580ac2fb816e6dd81d4f47": "Microsoft SQL Server 2000 SP4+Q826906/836651", "dbfcd5997ac28d826aaf4e9e7914ac97": "Microsoft SQL Server 2000 GDR SP4+Q941203/948110", "23ec3ff66c1800735f5b6baa2a483055": "Microsoft SQL Server 2000 SP4+Q899761", "cef2efdc1d7fe6763821c4c83f955a4a": "Microsoft SQL Server 2000 SP4", "bf3d933134ff0291ceb921eaf300e1f7": "Microsoft SQL Server 2000 SP4 Beta", "14a4b505bf15719571d05466cfb80fc6": "Microsoft SQL Server 2000 SP3+Q899410", "b85df1617a47264bc4cf23bf5313fcec": "Microsoft SQL Server 2000 SP3+Q930484", "155308c30b4ec6a15fca7de1f6ef4c00": "Microsoft SQL Server 2000 SP3+Q929410", "3d27feda127adc9c0f60dfb71d5ae86d": "Microsoft SQL Server 2000 SP3+Q917593", "99d9bb4f3b2e25d5ee032e43aab83e35": "Microsoft SQL Server 2000 SP3+Q915328", "511d0bf0e696c0a9f90c403a414a9925": "Microsoft SQL Server 2000 SP3+Q902852", "85fa39c1f5a29f4c6f2237ef040275de": "Microsoft SQL Server 2000 SP3+Q900416", "863b1709aaf4addbe359be0aecaa441c": "Microsoft SQL Server 2000 SP3+Q899428/899430", "545f2fc692e3559168d8c5b541f1f4cf": "Microsoft SQL Server 2000 SP3+Q898709", "dd4cad7b5563632c33dc4ea30b1bda4a": "Microsoft SQL Server 2000 SP3+Q887700", "91a685ca7920a8e2d42a45dbac182a2c": "Microsoft SQL Server 2000 SP3+Q896985", "c91ceaf0a4685672eca12c497dc3f0e5": "Microsoft SQL Server 2000 SP3+Q897572", "02c363b38ff917a2bf85a9ef3c6b9682": "Microsoft SQL Server 2000 SP3+Q896425", "dcdc9fdffad23c34e0bc6c8010ca8f39": "Microsoft SQL Server 2000 SP3+Q895123/187", "0354509565ad24faa47236b36715778f": "Microsoft SQL Server 2000 SP3+Q891866", "49b59d1c2b196cba51eaf0f26a2669dd": "Microsoft SQL Server 2000 SP3+Q894257", "bb29ac0ec7af53e35a246c1a8c0971d5": "Microsoft SQL Server 2000 SP3+Q893312", "329bf3062dbbeb087df696f323a81a54": "Microsoft SQL Server 2000 SP3+Q892923", "246548bc901dc2f22ae11fe615e3bf51": "Microsoft SQL Server 2000 SP3+Q892205", "6ee37d17719edd2909da543965cb8b0c": "Microsoft SQL Server 2000 SP3+Q891585", "c21550190cd6f4fef5ef3f3168b5c11d": "Microsoft SQL Server 2000 SP3+Q891311", "abc8c4ae0c53539c7b4bbd22affc0b33": "Microsoft SQL Server 2000 SP3+Q891017/891268", "21e4ffd1ca0f402b7497a6eeb2f42be5": "Microsoft SQL Server 2000 SP3+Q890942/768/767", "35d4a4596e208c832c80409b21aa15d8": "Microsoft SQL Server 2000 SP3+Q890925/888444/890742", "0a04fbd23bfd4301224c587c1b10b877": "Microsoft SQL Server 2000 SP3+Q889314", "db87459da44149b724cf7dc98ea7a854": "Microsoft SQL Server 2000 SP3+Q890200", "ab6fc3a3565a396b1a654f6f0b8aeac0": "Microsoft SQL Server 2000 SP3+Q889166", "b2d0c946993e599c1fd75eac48f86e1f": "Microsoft SQL Server 2000 SP3+Q889239", "1fb416297d3c46ee0f9b156ac2161c13": "Microsoft SQL Server 2000 SP3+Q887974", "d74e31ef5e8ed0380aa86cbba7d7454f": "Microsoft SQL Server 2000 SP3+Q888007", "85191180a1ed7d473b312bb21253c5d4": "Microsoft SQL Server 2000 SP3+Q884554", "959e85dd0f07ab61ce76e688fec54865": "Microsoft SQL Server 2000 SP3+Q885290", "34636c96d04096e0fc0f80b30f912cda": "Microsoft SQL Server 2000 SP3+Q872842", "91750489a03aeb1eddd714be321dd55e": "Microsoft SQL Server 2000 SP3+Q878501", "a8eb15523282e4f2f390b09942d9e9a6": "Microsoft SQL Server 2000 SP3+Q883415", "639315a644f9f953bfde0293ab44ee43": "Microsoft SQL Server 2000 SP3+Q873446", "d183e99afad930748f1723a0361c43ea": "Microsoft SQL Server 2000 SP3+Q878500", "76997a9fdc8fac6dc1223646ea79133f": "Microsoft SQL Server 2000 SP3+Q870994", "692d2835fb1e2eecf100ccd8d8bc487f": "Microsoft SQL Server 2000 SP3+Q867798", "db559b450028b6de61a7af91c3ffd424": "Microsoft SQL Server 2000 SP3+Q843282", "181fab6d35f826a4842ba17d57748c7d": "Microsoft SQL Server 2000 SP3+Q867878/867879/867880", "b303da0076e8ae00e309d0060bd3fd21": "Microsoft SQL Server 2000 SP3+Q843266", "3c6c96db722aeb4af970d1086821ec71": "Microsoft SQL Server 2000 SP3+Q843263", "bc59c19754ba6b45941f0a2730072787": "Microsoft SQL Server 2000 SP3+Q839280", "860a010707c5c1bed7b35143ca2bbb49": "Microsoft SQL Server 2000 SP3+Q841776", "5b7447e0961958d919e2d05df8342a04": "Microsoft SQL Server 2000 SP3+Q841627", "b8f551b5383f52d5e34250309420b29e": "Microsoft SQL Server 2000 SP3+Q841401", "1a2d7f95c1477c943ca79976b1e398dc": "Microsoft SQL Server 2000 SP3+Q841404", "b9db757a415276c9a105b94e9b8a8179": "Microsoft SQL Server 2000 SP3+Q840856", "16eb6f3240eb291f3ee0bcedd6b7e926": "Microsoft SQL Server 2000 SP3+Q839529", "0006bfe1b084f7de4a9597348cdf85f8": "Microsoft SQL Server 2000 SP3+Q839589", "214c16c244d8f5cc26f78a91a0600655": "Microsoft SQL Server 2000 SP3+Q839688", "e25a4ad12b6c1fb079cd32ac0eaf9158": "Microsoft SQL Server 2000 SP3+Q839523", "2c38fbbce9af744a87acd22b93a7e66c": "Microsoft SQL Server 2000 SP3+Q838460", "c48102a39c959f8fe55ac5d6eafb9563": "Microsoft SQL Server 2000 SP3+Q837970", "b90c267361c5e51ecfd9e8f375afc74b": "Microsoft SQL Server 2000 SP3+Q837957", "70a4034cb904d61eb766d095d54b8c99": "Microsoft SQL Server 2000 SP3+Q317989", "d10ca517eabbd398f7e088b15b1480f6": "Microsoft SQL Server 2000 SP3+Q837401", "5ad4e7c15750d9bedeb83e9155a1a456": "Microsoft SQL Server 2000 SP3+Q836651", "240d4ee87cf33bab6e85d0fa86c432fc": "Microsoft SQL Server 2000 SP3+Q837957", "a34dcd903ad479749c20bd19a21039dc": "Microsoft SQL Server 2000 SP3+Q834798", "b267075e4156bc8f70bc16a28c4054b6": "Microsoft SQL Server 2000 SP3+Q834290", "022b2e52fc875b6bbbb1b77b5532e7a6": "Microsoft SQL Server 2000 SP3+Q834453", "5e9e3430c257571e6b80f18fe2a5163f": "Microsoft SQL Server 2000 SP3+Q833710", "84aa6f2ed3d4e12cded4270aa3d81c20": "Microsoft SQL Server 2000 SP3+Q836141", "8b378b7aa850a1722203ceb466ed49a0": "Microsoft SQL Server 2000 SP3+Q832977", "1bf33b89ea85377b95dd10b2da95f297": "Microsoft SQL Server 2000 SP3+Q831950", "be32b6c980c0b1562c27aff4807d9639": "Microsoft SQL Server 2000 SP3+Q830912/831997/831999", "76610ef6ac2c6d2ff4790e0ca49b557e": "Microsoft SQL Server 2000 SP3+Q830887", "1f8d28ea21e0388c9d3ea36da652124f": "Microsoft SQL Server 2000 SP3+Q830767/830860", "1f20c0b03aad43758772b8f733bbac36": "Microsoft SQL Server 2000 SP3+Q830262", "9804bfcc55c1e2621983b475a8195132": "Microsoft SQL Server 2000 SP3+Q830588", "06d68ec4409efb9f7c9bd5023f2fbd1f": "Microsoft SQL Server 2000 SP3+Q830366", "c851ac35fa3372e702c8a76f8cfccea4": "Microsoft SQL Server 2000 SP3+Q830366", "b32b859c43a7d78fc52a439014dc294e": "Microsoft SQL Server 2000 SP3+Q830395/828945", "2f415d0d1fab1a9252aff9893f341b4b": "Microsoft SQL Server 2000 SP3+Q829205/829444", "a0eefb0a7a5683744f8696ce062280d8": "Microsoft SQL Server 2000 SP3+Q821334", "b9b4405689b7e3e91994d210b37f178c": "Microsoft SQL Server 2000 SP3+Q828637", "3563b592de9fa2caf222c49c52cb2826": "Microsoft SQL Server 2000 SP3+Q828017/827714/828308", "93a0b0382df938de832eed9ad36aac44": "Microsoft SQL Server 2000 SP3+Q828096", "b2f0d7795d67194e80021cfc8a2ada39": "Microsoft SQL Server 2000 SP3+Q828699", "b85cc7ed6e5c25420055f3ac5e6caf52": "Microsoft SQL Server 2000 SP3+Q830466/827954", "5c9d7da06bc9a1303e9036c0815c66ea": "Microsoft SQL Server 2000 SP3+Q826754", "4f2134b917da528f2c941f43f51a75dd": "Microsoft SQL Server 2000 SP3+Q826860/826815/826906", "23b43db6d31e8fd05027ab5c9c1ca866": "Microsoft SQL Server 2000 SP3+Q826822", "8e6c6d1c321af7ab0a5e1ebc06533443": "Microsoft SQL Server 2000 SP3+Q826433", "01689e6944f3586650fc839a09daced5": "Microsoft SQL Server 2000 SP3+Q826364/825854", "98bb46bd84bd1cecbb384f727c6f8872": "Microsoft SQL Server 2000 SP3+Q826080", "894e28560c520d1d39149a196f4949be": "Microsoft SQL Server 2000 SP3+Q825043", "ff85c3550c2ecb4878ff5ec3e69ea87f": "Microsoft SQL Server 2000 SP3+Q825225", "e2e149490297f10c6b6d4b76f6fc7498": "Microsoft SQL Server 2000 SP3+Q319477/319477", "a5b445f71f2a377474f2a36a744bfaff": "Microsoft SQL Server 2000 SP3+Q823877/824027/820788", "13c808e0bc046e0a5b8ffba069d64392": "Microsoft SQL Server 2000 SP3+Q821741/548/740/823514", "41eb61cbf4f70426af3988bc13ebc7a3": "Microsoft SQL Server 2000 SP3+Q826161", "ef4ee2dc2944c7e49664190dd153c471": "Microsoft SQL Server 2000 SP3+Q821277/337/818388/826161/821280", "ee826f8c465082b0f65a68da80de0375": "Microsoft SQL Server 2000 SP3+Q818766", "2d00ea780d8c2cdab739927428d3ad20": "Microsoft SQL Server 2000 SP3+Q819662", "c9140148cf12e80a2d07f3e94361f712": "Microsoft SQL Server 2000 SP3+Q819248/819662/818897", "aafc5dc78cb99cfad3eeba64a81a55e8": "Microsoft SQL Server 2000 SP3+Q818899", "cc36a5cdcf5f6bad0793c6a1cef22225": "Microsoft SQL Server 2000 SP3+Q818729", "d6f81b1a05e71ef0f2324555538a0462": "Microsoft SQL Server 2000 SP3+Q818540", "95cd165871c34f0b6546f6a7a0908b75": "Microsoft SQL Server 2000 SP3+Q818414/097/188", "099ff23250cf7a978a1ffe0ae8fba8ce": "Microsoft SQL Server 2000 SP3+Q817464", "350b6acd994ec368ca7880f2a230763a": "Microsoft SQL Server 2000 SP3+Q817464/813524/816440/817709", "4ef91c8af147277ccddad0793e2df2c7": "Microsoft SQL Server 2000 SP3+Q815249", "a4f8992973bcf888e98558f346570b4a": "Microsoft SQL Server 2000 SP3+Q817081", "a865be163ac9e48eb3dc3d92062c8615": "Microsoft SQL Server 2000 SP3+Q816840", "23c03c930097c999c545e213141e8973": "Microsoft SQL Server 2000 SP3+Q816985", "3e5bb714b7f121821370ee5ffb7f5e81": "Microsoft SQL Server 2000 SP3+Q815057", "ff84e7f07707dd6a8a96fc046b4dd188": "Microsoft SQL Server 2000 SP3+Q816084/810185", "0aab6fdd38e11578d69480ad546c0326": "Microsoft SQL Server 2000 SP3+Q814035", "d40385b15d7177701d1ccc373efa45d9": "Microsoft SQL Server 2000 SP3+Unidentified", "159e3c5927bd9649d84780b4df3a070a": "Microsoft SQL Server 2000 SP3+Q815115", "fa17e88fec36a7c405e3ed1fc7825775": "Microsoft SQL Server 2000 SP3+Q814889/93", "3f6a9680c981963533775e7cb4fb5562": "Microsoft SQL Server 2000 SP3a", "0a6d937b45a604f18764b791b3c9ff78": "Microsoft SQL Server 2000 SP3+Q810163/688/811611/813769/813759/812995/814665/460/813494", "a8a83b959f9b1b220b4decf7fd9ee371": "Microsoft SQL Server 2000 SP3+Q814113", "7b138e234394abb63ae7a991499216ac": "Microsoft SQL Server 2000 SP3+Q814032", "058637f3667bd3ef051d584889fc9dba": "Microsoft SQL Server 2000 SP3", "5ab9146359684369c4114b03e0d815f3": "Microsoft SQL Server 2000 SP2+Q818406/763", "6c706cca15b9b60eddae305be01046e7": "Microsoft SQL Server 2000 SP2+Q818096", "ee654d46c89d2f08facceda961fe747c": "Microsoft SQL Server 2000 SP2+Q816937", "673be5f4da93443c31d7cd53f01a3b1c": "Microsoft SQL Server 2000 SP2+Q81488", "ba0504a7001a8108d93812e21d214fc3": "Microsoft SQL Server 2000 SP2+Q813759", "6a1cd5d7804ffc0d8fdd4c5dde2c2e7c": "Microsoft SQL Server 2000 SP2+Q813769", "0fd59864f667ff86c862d240ea6b826d": "Microsoft SQL Server 2000 SP2+Q814460", "897258fe6bd5d27f6123090a557a7096": "Microsoft SQL Server 2000 SP2+Q812995/813494", "38f3d112f9d5741cf2c9bf10ab4c92aa": "Microsoft SQL Server 2000 SP2+Q812798", "a6fb9afd2d1728fdf8534fdbafd701c9": "Microsoft SQL Server 2000 SP2+Q812250/812393", "5469a8df4be4fb456220da13a94e985a": "Microsoft SQL Server 2000 SP2+Q811703", "ffa6512a511c80dbf82de3622ae2c75b": "Microsoft SQL Server 2000 SP2+Q810688/811611", "5f83dae13d17a9c921316c16e423625f": "Microsoft SQL Server 2000 SP2+Q811478", "f2d152848b751aa88274c514372b77bf": "Microsoft SQL Server 2000 SP2+Q811205", "31e67644ea06b479f854b4835455a7e4": "Microsoft SQL Server 2000 SP2+Q811052", "9b4cfbde55a1d2bfbd0c8e5c283ebb6b": "Microsoft SQL Server 2000 SP2+Q810920", "b094477c0115f62dc436a50ba29c70d7": "Microsoft SQL Server 2000 SP2+Q810526", "e75f77b61a0b50648d6ba4450c5f134e": "Microsoft SQL Server 2000 SP2+Q328551", "b4ce52ccffa3c71a30432e98f5c1dd23": "Microsoft SQL Server 2000 SP2+Q810026/810163", "6f8dadb61ac2804e3e077a4812b29a16": "Microsoft SQL Server 2000 SP2+Q810072", "e7dc54156ac1ebe11e5c56d47dda26c2": "Microsoft SQL Server 2000 SP2+Q810052/10", "24469c51c3a693ec3ce4d87c775bbb4b": "Microsoft SQL Server 2000 SP2+Q331885/965/968", "2a851042673090a8633c172e88dee95c": "Microsoft SQL Server 2000 SP2+Q330212", "35da1ac0bf89a0c4b90ef95bc79e9efd": "Microsoft SQL Server 2000 SP2+Q311104", "080caa480a46dab28516b2db1ff566f9": "Microsoft SQL Server 2000 SP2+Q329499", "cfc5eb9f37d286cabc2d0f6c88a7e2d7": "Microsoft SQL Server 2000 SP2+Q329487", "998f7167442e8bea95a65d20b7ab828d": "Microsoft SQL Server 2000 SP2+Q316333", "7edde13fda78609894b4da3f2b0185e9": "Microsoft SQL Server 2000 SP2+Q319851", "1d4ce7e2a9b9a4cbd657c58310e911eb": "Microsoft SQL Server 2000 SP2+Q316333", "6b619a027826a16268fb2f31ae5401d1": "Microsoft SQL Server 2000 SP2+Q328354", "d16f90cc9ff29222c668a5982fab7c2d": "Microsoft SQL Server 2000 SP2+8/14 fix", "c21324924cee3e170cd4c855b49627b0": "Microsoft SQL Server 2000 SP2+8/8 fix", "8f278410e502b8222a60f8877749bc12": "Microsoft SQL Server 2000 SP2+Q326999", "70a3b5a45d1215c72895fdf00c2d67c5": "Microsoft SQL Server 2000 SP2+7/24 fix", "ca31d287989f63f5f3bd5663ad194fc9": "Microsoft SQL Server 2000 SP2+Q810010?", "6525824de7fa2d7726e3d6a2039b7d51": "Microsoft SQL Server 2000 SP2+Q322853", "c529c7d89207dbe6a25170d1f7a5ff84": "Microsoft SQL Server 2000 SP2+Q324186", "071832bf16697c87322ccd80b2ab9d5d": "Microsoft SQL Server 2000 SP2+Q319507", "d53856b75e4748a06cfa6547bc4102e5": "Microsoft SQL Server 2000 SP2+3/29 fix", "c941921ca2a5344528955a5a50d87a57": "Microsoft SQL Server 2000 SP2+Q319869", "09066a6827f422a90520447d6261c1f6": "Microsoft SQL Server 2000 SP2+Q319477/319477", "2fd5a25ae8451cfad649b26616c3de52": "Microsoft SQL Server 2000 SP2+Q317979/318045", "3a47ee1b989aa62e041bbbf11cc0a64b": "Microsoft SQL Server 2000 SP2+1/29 fix", "a3069d793fd4898da4a6cc49ec9854bc": "Microsoft SQL Server 2000 SP2+Q314003/315395", "ae52459c92280b7076ff08f9f7faa612": "Microsoft SQL Server 2000 SP2+Q313002/5", "3a458aa61576dd6a1ca99080c24f51c0": "Microsoft SQL Server 2000 SP2", "3048436d9ea777ec672fc6f9b780108f": "Microsoft SQL Server 2000 SP2 Beta", "c3ea9d182af9828988511d958e0086d9": "Microsoft SQL Server 2000 SP1+1/29 fix", "4a16d6cb6d89eb887f4d4cadb29a719f": "Microsoft SQL Server 2000 SP1+Q315395", "7004fe830c8cd373dae8388c1fa7b428": "Microsoft SQL Server 2000 SP1+Q314003", "0cae5ce9142488b3841ceaab2f58e82c": "Microsoft SQL Server 2000 SP1+Q313302", "edee44c8e3eae46d42a59484da947bf8": "Microsoft SQL Server 2000 SP1+Q313005", "0c45d8573d7b54c690a92136903c1fee": "Microsoft SQL Server 2000 SP1+Q308547", "1b2b700f8e526f1b97d83a347f36e6d9": "Microsoft SQL Server 2000 SP1+Q307540/307655", "cc88239fcfb4331414cc061c5114de2c": "Microsoft SQL Server 2000 SP1+Q307538", "e2136ebf1cd70d40581495bf56a7f839": "Microsoft SQL Server 2000 SP1+Q304850", "6a2c92b72ffa1ebba460db3d27dc1fd3": "Microsoft SQL Server 2000 SP1", "0dc5c170558a5bc398944b9b2b3df1d5": "Microsoft SQL Server 2000 SP1 Beta", "c8fd50fd3e6988f8221f36652bbdfd92": "Microsoft SQL Server 2000 RTMa", "8fb5d6ffd5472d7955a1476f233f40cd": "Microsoft SQL Server 2000 SP0+Q299717", "fc4476a573fcc069b9cce75b85877598": "Microsoft SQL Server 2000 SP0+Q297209", "18325f49fcae057ac9fd5869bcaa9195": "Microsoft SQL Server 2000 SP0+Q300194", "bb546ab5fa68d71a3a8004576824c0fe": "Microsoft SQL Server 2000 SP0+Q291683", "af806b08a75eada023b793e5b1c79fa1": "Microsoft SQL Server 2000 SP0+Q288122", "22bb4a2333ae5ebc6e5c0987b08a2586": "Microsoft SQL Server 2000 SP0+Q285290", "9ba705874f98e6b8bd161c92143482aa": "Microsoft SQL Server 2000 SP0+Q282416", "295532fd25f6beb75fc8195c89ed2dba": "Microsoft SQL Server 2000 SP0+Q282279", "158b240bc68d63b55243f85d10226da2": "Microsoft SQL Server 2000 SP0+Q278239", "9380fd5719359992f214f9731c0e2f15": "Microsoft SQL Server 2000 SP0+Q281663", "72d486b18ed156b579bea1e6b9f81d4e": "Microsoft SQL Server 2000 SP0+Q28038", "ad2c9bf960a790f810d95fa75e9feb41": "Microsoft SQL Server 2000 SP0+Q281769", "b79829600c8bdd43137dc7e9f7875b89": "Microsoft SQL Server 2000 SP0+Q279183", "b265dc593bfd5517b188efc778075d00": "Microsoft SQL Server 2000 SP0+Q279293/279296", "e47ca0e5eed687725830ac79321a7c81": "Microsoft SQL Server 2000 SP0+Q276329", "3330f495e92b55cd2025c998c9ea4eed": "Microsoft SQL Server 2000 SP0+Q275900", "ccef653f625d0c24c3d39d771fff59b0": "Microsoft SQL Server 2000 SP0+Q274330", "1a5770255650633f3b8ca0d57de97961": "Microsoft SQL Server 2000 SP0+Q274329", "c45684e3ad99cca2d9f170078fa27758": "Microsoft SQL Server 2000 RTM", "fea8c83e635f80fe764f2b4a3e35f77c": "Microsoft SQL Server 2000 Gold", "3e240f428c04e8dc9ac70b90c60a4757": "Microsoft SQL Server 2000 Beta 2", "ea0b8449c9cdb6003133bac0bf2cc6de": "Microsoft SQL Server 2000 EAP5", "85e833abba2f2348edcbe15a7ecdbd60": "Microsoft SQL Server 2000 EAP4"} os_version = {"11": "Microsoft SQL Server 2012", "10": "Microsoft SQL Server 2008", "9": "Microsoft SQL Server 2005", "8": "Microsoft SQL Server 2000", "7": "Microsoft SQL Server 7"} if hash in I11: i11 = I11[hash] elif str(OOo) in os_version: i11 = os_version[str(OOo)] security_note(i11) except: pass
def gen_seed(self): # Return a base64-encoded (kinda ... strip the '==\n' from the # end) MD5 hash of sorted tree listing. self.allfiles.sort() return base64.encodestring(md5.md5(''.join( self.allfiles)).digest())[:-3]
def get_gravatar(email): import md5 return "https://secure.gravatar.com/avatar/{hash}?d=retro".format( hash=md5.md5(email).hexdigest())
def goPartExcel(self): import xlwt, random, md5, mimetypes, os filename = xlwt.Workbook() sheet = filename.add_sheet("%s" % self.navTitle) txt_center = xlwt.XFStyle() txt_center.alignment.horz = xlwt.Alignment.HORZ_CENTER txt_left = xlwt.XFStyle() txt_left.alignment.horz = xlwt.Alignment.HORZ_LEFT txt_right = xlwt.XFStyle() txt_right.alignment.horz = xlwt.Alignment.HORZ_RIGHT sheet.col(0).width = 256 * 20 sheet.col(1).width = 256 * 20 sheet.col(2).width = 256 * 20 sheet.col(3).width = 256 * 20 sheet.col(4).width = 256 * 20 sheet.col(5).width = 256 * 20 sheet.col(6).width = 256 * 20 sheet.col(7).width = 256 * 20 sheet.col(8).width = 256 * 20 sheet.col(9).width = 256 * 20 sheet.col(10).width = 256 * 20 sheet.col(11).width = 256 * 20 sheet.col(12).width = 256 * 20 #第一行 sheet.write(0, 0, "红包单号", txt_center) sheet.write(0, 1, "红包类型", txt_center) sheet.write(0, 2, "货号", txt_center) sheet.write(0, 3, "条码", txt_center) sheet.write(0, 4, "红包名称", txt_center) sheet.write(0, 5, "面值/价值", txt_center) sheet.write(0, 6, "数量", txt_center) sheet.write(0, 7, "会员姓名", txt_center) sheet.write(0, 8, "会员卡号", txt_center) sheet.write(0, 9, "电话号码", txt_center) sheet.write(0, 10, "红包时间", txt_center) sheet.write(0, 11, "过期时间", txt_center) sheet.write(0, 12, "红包状态", txt_center) PL, L = self.dl.mRight() i = 0 for e in L: sheet.write(i + 1, 0, e[0], txt_left) sheet.write(i + 1, 1, e[1], txt_left) sheet.write(i + 1, 2, e[2], txt_left) sheet.write(i + 1, 3, e[3], txt_center) sheet.write(i + 1, 4, e[4], txt_left) sheet.write(i + 1, 5, e[5], txt_right) sheet.write(i + 1, 6, e[6], txt_right) sheet.write(i + 1, 7, e[7], txt_left) sheet.write(i + 1, 8, e[8], txt_right) sheet.write(i + 1, 9, e[9], txt_center) sheet.write(i + 1, 10, str(e[10]), txt_center) sheet.write(i + 1, 11, str(e[11]), txt_center) if e[12] == 1: e10 = "已使用" elif e[12] == 2: e10 = "已过期" else: e10 = "未使用" sheet.write(i + 1, 12, e10, txt_center) i += 1 filePATH = r"D:/webpy/data/hjnwx/excel/%s.xls" % (md5.md5( "%s" % random.random()).hexdigest()) filename.save(filePATH) from flask import make_response file = open(filePATH, 'rb').read() response = make_response(file) response.headers['content-type'] = mimetypes.guess_type(filePATH)[0] response.headers['content-length'] = os.stat(filePATH)[6] filename = "%s%s.xls" % (self.navTitle, self.dl.getdate) response.headers[ 'Content-Disposition'] = "attachment; filename=%s" % filename.encode( "gbk") os.remove(filePATH) return response
def cts_upload(instance, filename): h = md5.md5('%s_%s' % (instance.cts.student.pk, filename)).hexdigest() return 'course_task_solutions_files/%s/%s/%s_%s' % (instance.cts.task.pk, instance.cts.student.pk, h, filename)
def md5_hex(data): hash = md5.md5() hash.update(data) hash.digest() return hash.hexdigest()
def count_hash_sums(self): f = open('neobug/' + self.url) self.md5sum = md5(f.read()).hexdigest() self.sha1sum = sha(f.read()).hexdigest() self.save()
# TODO: There is more data on this page that will not be parsed for the time being. # This includes opening times and facilities #page_soup = BeautifulSoup(urllib2.urlopen(more_info_url),convertEntities=BeautifulStoneSoup.HTML_ENTITIES) #address = ''.join(page_soup.find('strong', text="Address:").next.findAll(text=True)) #post_code = address.split(',')[-1].strip() #address = ', '.join([s.strip() for s in address.split(',')[:-1]]) # Ugly use of .next.next here to skip over a spurious <br> #cleaned_data['babychanging'] = ('Yes' in page_soup.find('strong', text="Baby changing facilities:").next.next) #cleaned_data['disabled'] = ('Yes' in page_soup.find('strong', text="Disabled facilities:").next.next) #cleaned_data['opening'] = page_soup.find('strong', text="Hours of operation:").next.next #cleaned_data['postcode'] = post_code #cleaned_data['address'] = address cleaned_data['toilet_id'] = md5.md5(toilet_name + ' Brighton and Hove').hexdigest() scraperwiki.sqlite.save(unique_keys=['toilet_id'], data=cleaned_data) import urllib2 import re import md5 from BeautifulSoup import BeautifulSoup, BeautifulStoneSoup import scraperwiki KML_URL = "http://www.brighton-hove.gov.uk/downloads/bhcc/openData/mapFiles/PublicToiletsKML.kml" ONS_CODE = "E06000043" soup = BeautifulStoneSoup(urllib2.urlopen(KML_URL)) for toilet in soup.findAll('placemark'):
def md5sum(t): return md5.md5(t).hexdigest()
def link_devel_products(logger, event_queue, package, package_path, devel_manifest_path, source_devel_path, dest_devel_path, metadata_path, prebuild): """Link files from an isolated devel space into a merged one. This creates directories and symlinks in a merged devel space to a package's linked devel space. """ # Create the devel manifest path if necessary mkdir_p(devel_manifest_path) # Construct manifest file path devel_manifest_file_path = os.path.join(devel_manifest_path, DEVEL_MANIFEST_FILENAME) # Pair of source/dest files or directories products = list() # List of files to clean files_to_clean = [] # List of files that collide files_that_collide = [] # Select the blacklist blacklist = DEVEL_LINK_PREBUILD_BLACKLIST if prebuild else DEVEL_LINK_BLACKLIST # Gather all of the files in the devel space for source_path, dirs, files in os.walk(source_devel_path): # compute destination path dest_path = os.path.join( dest_devel_path, os.path.relpath(source_path, source_devel_path)) # create directories in the destination develspace for dirname in dirs: source_dir = os.path.join(source_path, dirname) dest_dir = os.path.join(dest_path, dirname) if os.path.islink(source_dir): # Store the source/dest pair products.append((source_dir, dest_dir)) if os.path.exists(dest_dir): if os.path.realpath(dest_dir) != os.path.realpath( source_dir): files_that_collide.append(dest_dir) else: logger.out('Linked: ({}, {})'.format( source_dir, dest_dir)) else: # Create a symlink logger.out('Symlinking %s' % (dest_dir)) try: os.symlink(source_dir, dest_dir) except OSError: logger.err( 'Could not create symlink `{}` referencing `{}`'. format(dest_dir, source_dir)) raise else: if not os.path.exists(dest_dir): # Create the dest directory if it doesn't exist os.mkdir(dest_dir) elif not os.path.isdir(dest_dir): logger.err( 'Error: Cannot create directory: {}'.format(dest_dir)) return -1 # create symbolic links from the source to the dest for filename in files: # Don't link files on the blacklist unless this is a prebuild package if os.path.relpath(os.path.join(source_path, filename), source_devel_path) in blacklist: continue source_file = os.path.join(source_path, filename) dest_file = os.path.join(dest_path, filename) # Store the source/dest pair products.append((source_file, dest_file)) # Check if the symlink exists if os.path.exists(dest_file): if os.path.realpath(dest_file) != os.path.realpath( source_file): # Compute hashes for colliding files source_hash = md5( open(os.path.realpath(source_file), "rb").read()).hexdigest() dest_hash = md5( open(os.path.realpath(dest_file), "rb").read()).hexdigest() # If the link links to a different file, report a warning and increment # the collision counter for this path if dest_hash != source_hash: logger.err( 'Warning: Cannot symlink from %s to existing file %s' % (source_file, dest_file)) logger.err( 'Warning: Source hash: {}'.format(source_hash)) logger.err('Warning: Dest hash: {}'.format(dest_hash)) # Increment link collision counter files_that_collide.append(dest_file) else: logger.out('Linked: ({}, {})'.format( source_file, dest_file)) else: # Create the symlink logger.out('Symlinking %s' % (dest_file)) try: os.symlink(source_file, dest_file) except OSError: logger.err( 'Could not create symlink `{}` referencing `{}`'. format(dest_file, source_file)) raise # Load the old list of symlinked files for this package if os.path.exists(devel_manifest_file_path): with open(devel_manifest_file_path, 'r') as devel_manifest: manifest_reader = csv.reader(devel_manifest, delimiter=' ', quotechar='"') # Skip the package source directory devel_manifest.readline() # Read the previously-generated products for source_file, dest_file in manifest_reader: # print('Checking (%s, %s)' % (source_file, dest_file)) if (source_file, dest_file) not in products: # Clean the file or decrement the collision count logger.out('Cleaning: (%s, %s)' % (source_file, dest_file)) files_to_clean.append(dest_file) # Remove all listed symlinks and empty directories which have been removed # after this build, and update the collision file try: clean_linked_files(logger, event_queue, metadata_path, files_that_collide, files_to_clean, dry_run=False) except: # noqa: E722 # Silencing E722 here since we immediately re-raise the exception. logger.err('Could not clean linked files.') raise # Save the list of symlinked files with open(devel_manifest_file_path, 'w') as devel_manifest: # Write the path to the package source directory devel_manifest.write('%s\n' % package_path) # Write all the products manifest_writer = csv.writer(devel_manifest, delimiter=' ', quotechar='"') for source_file, dest_file in products: manifest_writer.writerow([source_file, dest_file]) return 0
def get_gravatar_url(email): return "https://secure.gravatar.com/avatar/{hash}?d=mm&s=200".format( hash=md5.md5(email).hexdigest())
#!/usr/bin/env python import sys import md5 for fn in sys.argv[1:]: print "Doing", fn f = open(fn) b = f.read() f.close() m = md5.md5(b) fout = open(fn + ".md5", "w") fout.write(m.hexdigest() + "\n") fout.close()
def log_exception(d, daystring): exc_desc = d['exception_desc'] exc_type = d['exception_type'] exc_str = "%s: %s" % (exc_type, exc_desc) add_timestamps(d) tb = [] key_material = exc_type pretty_lines = [] make_lock_seen = False flaky_db_seen = False for tpl in d['traceback']: tb.append(tpl) filename, lineno, funcname, text = tpl if text is None: pass elif (text.startswith("with g.make_lock(") or text.startswith("with make_lock(")): make_lock_seen = True elif (text.startswith( "(ProgrammingError) server closed the connection")): flaky_db_seen = True key_material += "%s %s " % (filename, funcname) pretty_lines.append("%s:%s: %s()" % (filename, lineno, funcname)) pretty_lines.append(" %s" % text) if exc_desc.startswith("QueuePool limit of size"): fingerprint = "QueuePool_overflow" elif exc_desc.startswith("error 2 from memcached_get: HOSTNAME "): fingerprint = "memcache_suckitude" elif exc_type == "TimeoutExpired" and make_lock_seen: fingerprint = "make_lock_timeout" elif exc_desc.startswith("(OperationalError) FATAL: the database " + "system is in recovery mode"): fingerprint = "recovering_db" elif exc_desc.startswith("(OperationalError) could not connect " + "to server"): fingerprint = "unconnectable_db" elif exc_desc.startswith("(OperationalError) server closed the " + "connection unexpectedly"): fingerprint = "flaky_db_op" elif exc_type == "ProgrammingError" and flaky_db_seen: fingerprint = "flaky_db_prog" # SQLAlchemy includes the entire query in the exception # description which can sometimes be gigantic, in the case of # SELECTs. Get rid of it. select_pos = exc_str.find("SELECT") if select_pos > 0: exc_str = exc_str[pos] elif exc_type == "NoServerAvailable": fingerprint = "cassandra_suckitude" else: fingerprint = md5(key_material).hexdigest() nickname_key = "error_nickname-" + fingerprint status_key = "error_status-" + fingerprint nickname = g.hardcache.get(nickname_key) if nickname is None: nickname = '"%s" Exception' % randword().capitalize() news = ("A new kind of thing just happened! " + "I'm going to call it a %s\n\n" % nickname) news += "Where and when: %s\n\n" % d['occ'] news += "Traceback:\n" news += "\n".join(pretty_lines) news += exc_str news += "\n" emailer.nerds_email(news, "Exception Watcher") g.hardcache.set(nickname_key, nickname, 86400 * 365) g.hardcache.set(status_key, "new", 86400) if g.hardcache.get(status_key) == "fixed": g.hardcache.set(status_key, "new", 86400) news = "This was marked as fixed: %s\n" % nickname news += "But it just occurred, so I'm marking it new again." emailer.nerds_email(news, "Exception Watcher") err_key = "-".join(["error", daystring, fingerprint]) existing = g.hardcache.get(err_key) if not existing: existing = dict(exception=exc_str, traceback=tb, occurrences=[]) limited_append(existing['occurrences'], d['occ']) g.hardcache.set(err_key, existing, 7 * 86400) streamlog("%s [X] %-70s" % (d['hms'], nickname), verbose)
def save(self): try: if 'pos' in request.params and 'zoomlevel' in request.params: save_merc_x, save_merc_y = [ int(x) for x in request.params['pos'].split(",") ] save_zoom = int(request.params['zoomlevel']) pos = mapper.merc2latlon((save_merc_x, save_merc_y), save_zoom) self.set_pos_zoom(pos, save_zoom) wps = self.get_waypoints(request.params) oldname = request.params.get('oldtripname', '') tripname = request.params.get('tripname', '') if tripsharing.sharing_active(): #Can't rename trips while tripsharing is active! tripname = session['current_trip'] if oldname != session['current_trip']: #In some strange way a non-tripsharing oldname appeared in the post. This #means that something has gone awry. Don't save! print "Bad trip oldname while tripsharing active!" return "notok" if 'showarea' in request.params and request.params['showarea']: sha = request.params['showarea'] if (sha == '.'): session['showarea'] = '' session['showarea_id'] = '' session['showtrack'] = None else: session['showarea'] = sha session['showarea_id'] = md5( sha.encode('utf8')).hexdigest() session['showtrack'] = None session['mapvariant'] = request.params.get('mapvariant', 'airspace') #print "Req:",request.params oldtrip = None if not oldname.strip(): oldname = tripname oldtrips = meta.Session.query(Trip).filter( sa.and_(Trip.user == tripuser(), Trip.trip == oldname)).all() if len(oldtrips) == 1: oldtrip = oldtrips[0] if oldtrip: trip = oldtrip if trip.trip != tripname: if tripsharing.sharing_active(): #attempt to rename someone elses trip! Can't be allowed! set tripname to old name print "Attempt to rename trip while viewing shared trip (tripsharing)" return "notok" else: trip.trip = self.get_free_tripname(tripname) if session[ 'current_trip'] != trip.trip and tripsharing.sharing_active( ): #internal error if we get here - the earlier test for current_trip not changing failed. print "Unexpected tripsharing error #2" return "notok" session['current_trip'] = trip.trip else: if tripsharing.sharing_active(): #we use sharing, but the shared trip can't be found! print "Tripsharing active, but named trip didn't exist (deleted, probably)" return "notok" tripname = self.get_free_tripname(tripname) trip = Trip(tripuser(), tripname) acs = meta.Session.query(Aircraft).filter( sa.and_(Aircraft.user == tripuser())).all() if len(acs): trip.aircraft = acs[0].aircraft meta.Session.add(trip) session['current_trip'] = tripname oldwps = set([(wp.id) for wp in meta.Session.query(Waypoint).filter( sa.and_(Waypoint.user == tripuser(), Waypoint.trip == trip.trip)).all()]) newwps = set(wps.keys()) #print "NEW WPS",wps removed = oldwps.difference(newwps) added = newwps.difference(oldwps) updated = newwps.intersection(oldwps) print "Removed: ", removed addedwps = added removedwps = removed updatedwps = updated ordering2wpid = dict() for remord in removed: meta.Session.query(Waypoint).filter( sa.and_(Waypoint.user == tripuser(), Waypoint.trip == trip.trip, Waypoint.id == remord)).delete() #print "\n\n====DELETING!=====\n%s\n\n"%(rem,) resultant_by_order = dict() resultant_id2order = dict() waypointlink = dict() for add in added: wp = wps[add] waypoint = Waypoint(tripuser(), trip.trip, wp['pos'], int(wp['id']), int(wp['ordering']), wp['name'], wp['altitude']) resultant_by_order[int(wp['ordering'])] = waypoint resultant_id2order[int(wp['id'])] = wp['ordering'] #print "\n\n====ADDING!=====\n%s %s %s\n\n"%(waypoint.id,waypoint.pos,waypoint.waypoint) meta.Session.add(waypoint) for upd in updated: wp = wps[upd] us = meta.Session.query(Waypoint).filter( sa.and_(Waypoint.user == tripuser(), Waypoint.trip == trip.trip, Waypoint.id == upd)).all() if len(us) > 0: u = us[0] prevpos = mapper.from_str(u.pos) newpos = mapper.from_str(wp['pos']) approxdist = (prevpos[0] - newpos[0])**2 + (prevpos[1] - newpos[1])**2 if approxdist > ( 1.0 / 36000.0 )**2: #if moved more than 0.1 arc-second, otherwise leave be. u.pos = wp['pos'] print "Waypoint %d moved! (%f deg)" % ( u.id, math.sqrt(approxdist)) else: print "Waypoint %d has only moved a little (%f deg)" % ( u.id, math.sqrt(approxdist)) u.waypoint = wp['name'] assert u.id == int(wp['id']) u.ordering = wp['ordering'] u.altitude = wp['altitude'] resultant_by_order[int(wp['ordering'])] = u resultant_id2order[int(wp['id'])] = wp['ordering'] #print "\n\n====UPDATING!=====\n%s %s %s\n\n"%(u.id,u.pos,u.waypoint) #print "Resultant by ordering: %s"%(resultant_by_order,) seq = list(sorted(resultant_by_order.items())) newroutes = set() for (ord1, waypoint1), (ord2, waypoint2) in zip(seq[:-1], seq[1:]): if not int(ord1) + 1 == int(ord2): print "Waypoints %s and %s not consecutive (#%d, #%d)" % ( waypoint1, waypoint2, int(ord1), int(ord2)) assert int(ord1) + 1 == int(ord2) newroutes.add((waypoint1.id, waypoint2.id)) oldrouteobjs = list( meta.Session.query(Route).filter( sa.and_(Route.user == tripuser(), Route.trip == trip.trip)).all()) oldroutes = set([(route.waypoint1, route.waypoint2) for route in oldrouteobjs]) prevalts = dict() for rt in oldrouteobjs: prevalts[(rt.a.id, +1)] = rt.altitude prevalts[(rt.b.id, -1)] = rt.altitude #Routes: removed = oldroutes.difference(newroutes) added = newroutes.difference(oldroutes) updated = newroutes.intersection(oldroutes) print "Removed routes:", removed print "Added routes:", added print "Kept routes: ", updated for rem1, rem2 in removed: meta.Session.query(Route).filter( sa.and_(Route.user == tripuser(), Route.trip == trip.trip, Route.waypoint1 == rem1, Route.waypoint2 == rem2)).delete() sel_acs = meta.Session.query(Aircraft).filter( sa.and_(Aircraft.aircraft == trip.aircraft, Aircraft.user == tripuser())).all() if len(sel_acs): tas = sel_acs[0].cruise_speed else: tas = 75 for a1, a2 in added: cruisealt = "" a = None if a1 in addedwps: startord = resultant_id2order.get(int(a1), 0) elif a2 in addedwps: startord = resultant_id2order.get(int(a2), 0) else: startord = resultant_id2order.get(int(a1), 0) print "Ordering of new wp: %d is %d" % (a1, startord) num_waypoints = len(resultant_by_order) def searchpattern(begin, num): assert begin >= 0 and begin < num down = begin - 1 up = begin + 1 while True: work = False if down >= 0: yield down down -= 1 work = True if up < num: yield up up += 1 work = True if not work: break for wpord in searchpattern(startord, num_waypoints): wp = resultant_by_order.get(wpord, None) print "Searchpattern visiting order: %d" % (wpord, ) if wp: if wpord < startord: cruisealt = prevalts.get((wp.id, +1), '') print "Looking for alt previously after wp %d, got: %s" % ( wp.id, cruisealt) else: cruisealt = prevalts.get((wp.id, -1), '') print "Looking for alt previously before wp %d, got: %s" % ( wp.id, cruisealt) if cruisealt != "": break if cruisealt == "": cruisealt = "1500" r = Route(tripuser(), trip.trip, a1, a2, 0, 0, tas, None, cruisealt) meta.Session.add(r) session.save() meta.Session.flush() meta.Session.commit() ret = json.dumps([tripname]) print "mapview returning json:", ret return ret except Exception, cause: #print line number and stuff as well print cause #TODO: ONLY FOR TESTING!!!! raise return "notok"
def generate_key(room, user): key = '%s:%s' % (str(room), str(user)) return md5.md5(key).hexdigest()